{"id":372,"date":"2023-06-13T11:14:44","date_gmt":"2023-06-13T18:14:44","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/?p=372"},"modified":"2023-06-13T11:21:45","modified_gmt":"2023-06-13T18:21:45","slug":"net-8-preview-4-%e5%8f%91%e5%b8%83","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/net-8-preview-4-%e5%8f%91%e5%b8%83\/","title":{"rendered":".NET 8 Preview 4 \u53d1\u5e03"},"content":{"rendered":"<p><i><span data-contrast=\"auto\">\u4f5c\u8005\uff1a<\/span><\/i><i><span data-contrast=\"none\">Jon Douglas &#8211; <\/span><\/i><i><span data-contrast=\"auto\">Principal Program Manager, NuGet<\/span><\/i><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<p><i><span data-contrast=\"auto\">\u7ffb\u8bd1\uff1aAlan Wang<\/span><\/i><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6211\u4eec\u5f88\u9ad8\u5174\u4e0e\u5927\u5bb6\u5206\u4eab\u5728 <\/span><a href=\"https:\/\/dotnet.microsoft.com\/next\"><span data-contrast=\"none\">.NET 8 \u9884\u89c8\u7248 4<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\u7684\u6240\u6709\u65b0\u529f\u80fd\u548c\u6539\u8fdb\uff01\u8fd9\u6b21\u53d1\u5e03\u662f\u7ee7<\/span><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-dotnet-8-preview-3\/\"><span data-contrast=\"none\">\u9884\u89c8\u7248 3<\/span><\/a><span data-contrast=\"auto\">\u4e4b\u540e\u7684\u66f4\u65b0\u3002\u60a8\u5c06\u5728\u8fd9\u4e9b\u6708\u5ea6\u53d1\u5e03\u4e2d\u770b\u5230\u66f4\u591a\u529f\u80fd\u9010\u6e10\u4eae\u76f8\u3002.NET 6 \u548c 7 \u7684\u7528\u6237\u5c06\u5e0c\u671b\u5bc6\u5207\u5173\u6ce8\u6b64\u7248\u672c\uff0c\u56e0\u4e3a\u6211\u4eec\u4e13\u6ce8\u4e8e\u4f7f\u5347\u7ea7\u8fc7\u7a0b\u53d8\u5f97\u975e\u5e38\u7b80\u5355\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u60a8\u53ef\u4ee5\u4e3a Linux\u3001macOS \u548c Windows <\/span><a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet\/8.0\"><span data-contrast=\"none\">\u4e0b\u8f7d .NET 8 \u9884\u89c8\u7248 4<\/span><\/a><span data-contrast=\"auto\">\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet\/8.0\"><span data-contrast=\"none\">\u5b89\u88c5\u7a0b\u5e8f\u548c\u4e8c\u8fdb\u5236\u6587\u4ef6<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"2\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/dotnet-docker\/blob\/main\/documentation\/supported-tags.md\"><span data-contrast=\"none\">\u5bb9\u5668\u955c\u50cf<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"3\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/core\/tree\/main\/release-notes\/8.0\"><span data-contrast=\"none\">\u53d1\u884c\u8bf4\u660e<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/main\/release-notes\/8.0\/known-issues.md\"><span data-contrast=\"none\">\u5df2\u77e5\u95ee\u9898<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"5\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/core\/issues\"><span data-contrast=\"none\">GitHub \u95ee\u9898\u8ddf\u8e2a\u5668<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Microsoft Build 2023 \u5373\u5c06\u5230\u6765\uff01 .NET \u56e2\u961f\u5c06\u4e3e\u529e\u4e00\u7cfb\u5217\u6d3b\u52a8\uff0c\u4ece\u6280\u672f\u6df1\u5ea6\u6316\u6398\u5230\u4e0e\u56e2\u961f\u8fdb\u884c\u95ee\u7b54\u3002<\/span><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/microsoft-build-2023-and-dotnet\/\"><span data-contrast=\"none\">\u5728 Microsoft Build 2023 \u4e2d\u52a0\u5165 .NET \u56e2\u961f<\/span><\/a><span data-contrast=\"auto\">\uff01<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u67e5\u770b\u5728\u9884\u89c8\u7248 4 \u53d1\u5e03\u4e2d <\/span><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/asp-net-core-updates-in-dotnet-8-preview-4\"><span data-contrast=\"none\">ASP.NET Core<\/span><\/a><span data-contrast=\"auto\"> \u548c <\/span><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-ef8-preview-4\"><span data-contrast=\"none\">EF Core<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\u7684\u65b0\u529f\u80fd\u3002\u4e86\u89e3\u6700\u65b0\u7684\u5373\u5c06\u4e0a\u7ebf\u7684 <\/span><a href=\"https:\/\/learn.microsoft.com\/dotnet\/core\/whats-new\/dotnet-8\"><span data-contrast=\"none\">.NET 8 \u7684\u65b0\u529f\u80fd<\/span><\/a><span data-contrast=\"auto\">\u3002\u5728\u6574\u4e2a\u53d1\u5e03\u8fc7\u7a0b\u4e2d\u90fd\u5c06\u4fdd\u6301\u66f4\u65b0\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6700\u540e\uff0c.NET 8 \u5df2\u7ecf\u4e0e 17.7 \u9884\u89c8\u7248 1 \u8fdb\u884c\u4e86\u6d4b\u8bd5\u3002\u6211\u4eec\u5efa\u8bae\u60a8\u4f7f\u7528<\/span><a href=\"https:\/\/visualstudio.com\/preview\"><span data-contrast=\"none\">\u9884\u89c8\u6e20\u9053\u6784\u5efa<\/span><\/a><span data-contrast=\"auto\">\uff0c\u5982\u679c\u60a8\u60f3\u5c1d\u8bd5\u5728 Visual Studio \u7cfb\u5217\u4ea7\u54c1\u4e2d\u4f7f\u7528 .NET 8\u3002Visual Studio for Mac \u5bf9 .NET 8 \u7684\u652f\u6301\u5c1a\u672a\u63a8\u51fa\u3002\u5982\u679c\u60a8\u575a\u6301\u4f7f\u7528\u7a33\u5b9a\u6e20\u9053\uff0c\u8bf7\u67e5\u770b <\/span><a href=\"https:\/\/aka.ms\/vs\/v176GA\"><span data-contrast=\"none\">Visual Studio 17.6 \u53d1\u5e03<\/span><\/a><span data-contrast=\"auto\">\u4e2d\u7684\u6700\u65b0\u529f\u80fd\u548c\u6539\u8fdb\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u73b0\u5728\uff0c\u8ba9\u6211\u4eec\u6765\u770b\u4e00\u4e9b .NET 8 \u7684\u65b0\u529f\u80fd\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-preview-4-1024x536-1.png\"><img decoding=\"async\" class=\"alignnone wp-image-377\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-preview-4-1024x536-1-300x157.png\" alt=\"Image dotnet 8 preview 4 1024 215 536\" width=\"575\" height=\"301\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-preview-4-1024x536-1-300x157.png 300w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-preview-4-1024x536-1-768x402.png 768w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-preview-4-1024x536-1.png 1024w\" sizes=\"(max-width: 575px) 100vw, 575px\" \/><\/a><\/p>\n<p><b><span data-contrast=\"auto\">MSBuild\uff1a\u5168\u65b0\u7684\u73b0\u4ee3\u5316\u7ec8\u7aef\u6784\u5efa\u8f93\u51fa<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"6\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/msbuild\/issues\/8370\"><span data-contrast=\"none\">https:\/\/github.com\/dotnet\/msbuild\/issues\/8370<\/span><\/a><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u6211\u4eec\u7ecf\u5e38\u6536\u5230\u7528\u6237\u53cd\u9988\uff0c\u6307\u51fa\u9ed8\u8ba4\u7684 MSBuild \u8f93\u51fa\uff08\u5728\u5185\u90e8\u79f0\u4e3a\u63a7\u5236\u53f0\u65e5\u5fd7\u8bb0\u5f55\u5668\uff09\u96be\u4ee5\u89e3\u6790\u3002\u5b83\u76f8\u5f53\u9759\u6001\uff0c\u901a\u5e38\u662f\u4e00\u5927\u5806\u6587\u5b57\uff0c\u800c\u4e14\u5728\u6784\u5efa\u8fc7\u7a0b\u4e2d\u4f1a\u5b9e\u65f6\u663e\u793a\u9519\u8bef\uff0c\u800c\u4e0d\u662f\u4f5c\u4e3a\u6784\u5efa\u9879\u76ee\u7684\u4e00\u90e8\u5206\u903b\u8f91\u663e\u793a\u3002\u6211\u4eec\u8ba4\u4e3a\u8fd9\u4e9b\u90fd\u662f\u5f88\u597d\u7684\u53cd\u9988\u610f\u89c1\uff0c\u5e76\u5f88\u9ad8\u5174\u63a8\u51fa\u6211\u4eec\u5bf9 MSBuild \u8f93\u51fa\u65e5\u5fd7\u66f4\u65b0\u3001\u66f4\u73b0\u4ee3\u5316\u7684\u7b2c\u4e00\u4e2a\u8fed\u4ee3\u7248\u672c\u3002\u6211\u4eec\u79f0\u4e4b\u4e3a Terminal Logger\uff0c\u5b83\u6709\u4ee5\u4e0b\u51e0\u4e2a\u4e3b\u8981\u76ee\u6807\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"7\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u5c06\u9519\u8bef\u4e0e\u6240\u5c5e\u9879\u76ee\u8fdb\u884c\u903b\u8f91\u5206\u7ec4<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"8\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u4ee5\u7528\u6237\u8ba4\u4e3a\u7684\u6784\u5efa\u65b9\u5f0f\u5c55\u793a\u9879\u76ee\/\u6784\u5efa\uff08\u5c24\u5176\u662f\u591a\u76ee\u6807\u9879\u76ee\uff09<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"9\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u66f4\u597d\u5730\u533a\u5206\u9879\u76ee\u6784\u5efa\u7684 TargetFrameworks<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"10\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u7ee7\u7eed\u63d0\u4f9b\u5173\u4e8e\u9879\u76ee\u8f93\u51fa\u7684\u6982\u89c8\u4fe1\u606f<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"11\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u5728\u6574\u4e2a\u6784\u5efa\u8fc7\u7a0b\u4e2d\u63d0\u4f9b\u5173\u4e8e\u6784\u5efa\u5f53\u524d\u6b63\u5728\u6267\u884c\u7684\u64cd\u4f5c\u7684\u4fe1\u606f\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u8fd9\u662f\u5b83\u7684\u6837\u5b50\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-1.gif\"><img decoding=\"async\" class=\"alignnone size-full wp-image-387\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-1.gif\" alt=\"Image dotnet 8 p4 1\" width=\"1115\" height=\"628\" \/><\/a><\/p>\n<p><span data-contrast=\"auto\">\u53ef\u4ee5\u4f7f\u7528 <\/span><span data-contrast=\"none\">\/tl<\/span><span data-contrast=\"auto\"> \u4ee5\u53ca\u4ee5\u4e0b\u9009\u9879\u4e4b\u4e00\u6765\u542f\u7528\u65b0\u7684\u8f93\u51fa\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"12\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">auto<\/span><span data-contrast=\"auto\"> &#8211; \u9ed8\u8ba4\u8bbe\u7f6e\uff0c\u4f1a\u5728\u542f\u7528\u65b0\u65e5\u5fd7\u8bb0\u5f55\u5668\u4e4b\u524d\u68c0\u67e5\u7ec8\u7aef\u662f\u5426\u80fd\u591f\u4f7f\u7528\u65b0\u529f\u80fd\uff0c\u5e76\u4e14\u6ca1\u6709\u4f7f\u7528\u91cd\u5b9a\u5411\u7684\u6807\u51c6\u8f93\u51fa\uff1b<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"13\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">on<\/span><span data-contrast=\"auto\"> &#8211; \u91cd\u5199\u4e0a\u8ff0\u73af\u5883\u68c0\u6d4b\uff0c\u5e76\u5f3a\u5236\u4f7f\u7528\u65b0\u7684\u65e5\u5fd7\u8bb0\u5f55\u5668\uff1b<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"14\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"none\">off<\/span><span data-contrast=\"auto\"> &#8211; \u91cd\u5199\u4e0a\u8ff0\u73af\u5883\u68c0\u6d4b\uff0c\u5e76\u5f3a\u5236\u4f7f\u7528\u4e4b\u524d\u7684\u63a7\u5236\u53f0\u65e5\u5fd7\u8bb0\u5f55\u5668\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u4e00\u65e6\u542f\u7528\uff0c\u65b0\u7684\u65e5\u5fd7\u8bb0\u5f55\u5668\u5c06\u663e\u793a\u6062\u590d\u9636\u6bb5\uff0c\u7136\u540e\u662f\u6784\u5efa\u9636\u6bb5\u3002\u5728\u6bcf\u4e2a\u9636\u6bb5\uff0c\u5f53\u524d\u6b63\u5728\u6784\u5efa\u7684\u9879\u76ee\u4f4d\u4e8e\u7ec8\u7aef\u5e95\u90e8\uff0c\u6bcf\u4e2a\u6b63\u5728\u6784\u5efa\u7684\u9879\u76ee\u90fd\u4f1a\u544a\u8bc9\u60a8\u5f53\u524d\u6b63\u5728\u6784\u5efa\u7684 MSBuild Target \u4ee5\u53ca\u5728\u8be5\u76ee\u6807\u4e0a\u82b1\u8d39\u7684\u65f6\u95f4\u3002\u6211\u4eec\u5e0c\u671b\u8fd9\u4e9b\u4fe1\u606f\u8ba9\u7528\u6237\u66f4\u6e05\u695a\u5730\u4e86\u89e3\u6784\u5efa\u8fc7\u7a0b\uff0c\u5e76\u4e3a\u4ed6\u4eec\u63d0\u4f9b\u4e00\u4e2a\u8d77\u70b9\uff0c\u4ee5\u4fbf\u5728\u4ed6\u4eec\u60f3\u8981\u4e86\u89e3\u66f4\u591a\u5173\u4e8e\u6784\u5efa\u7684\u4fe1\u606f\u65f6\u8fdb\u884c\u641c\u7d22\uff01\u5f53\u9879\u76ee\u5168\u90e8\u6784\u5efa\u5b8c\u6210\u540e\uff0c\u5c06\u4e3a\u6bcf\u4e2a\u6784\u5efa\u7f16\u5199\u4e00\u4e2a\u201c\u6784\u5efa\u5b8c\u6210\u201d\u6bb5\uff0c\u7528\u6765\u6355\u83b7\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"15\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u5df2\u6784\u5efa\u9879\u76ee\u7684\u540d\u79f0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"16\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u76ee\u6807\u6846\u67b6\uff08\u5982\u679c\u662f\u591a\u76ee\u6807\u7684\uff01\uff09<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"17\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u6784\u5efa\u7684\u72b6\u6001<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"18\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u6784\u5efa\u7684\u4e3b\u8981\u8f93\u51fa\uff08\u8d85\u94fe\u63a5\u4ee5\u4fbf\u5feb\u901f\u8bbf\u95ee\uff09<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"19\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u6700\u540e\u662f\u7531\u8be5\u9879\u76ee\u7684\u6784\u5efa\u751f\u6210\u7684\u6240\u6709\u8bca\u65ad\u4fe1\u606f<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u8fd9\u4e2a\u793a\u4f8b\u6ca1\u6709\u8bca\u65ad\u4fe1\u606f &#8211; \u8ba9\u6211\u4eec\u770b\u53e6\u4e00\u4e2a\u5728\u540c\u4e00\u9879\u76ee\u4e2d\u5f15\u5165\u4e86\u62fc\u5199\u9519\u8bef\u7684\u6784\u5efa\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-2.gif\"><img decoding=\"async\" class=\"alignnone size-full wp-image-386\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-2.gif\" alt=\"Image dotnet 8 p4 2\" width=\"1115\" height=\"628\" \/><\/a><\/p>\n<p><span data-contrast=\"auto\">\u5728\u8fd9\u91cc\uff0c\u60a8\u53ef\u4ee5\u6e05\u695a\u5730\u770b\u5230\u9879\u76ee\u548c\u62fc\u5199\u9519\u8bef\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6211\u4eec\u8ba4\u4e3a\u8fd9\u79cd\u5e03\u5c40\u7b26\u5408 .NET \u7684\u73b0\u4ee3\u611f\uff0c\u5e76\u5229\u7528\u73b0\u4ee3\u7ec8\u7aef\u7684\u529f\u80fd\u5411\u7528\u6237\u63d0\u4f9b\u66f4\u591a\u5173\u4e8e\u4ed6\u4eec\u6784\u5efa\u7684\u4fe1\u606f\u3002\u6211\u4eec\u5e0c\u671b\u60a8\u4f1a\u5c1d\u8bd5\u4f7f\u7528\u5b83\uff0c\u5e76\u4e3a\u6211\u4eec\u63d0\u4f9b\u53cd\u9988\uff0c\u544a\u8bc9\u6211\u4eec\u5b83\u5bf9\u60a8\u6709\u4ec0\u4e48\u4f5c\u7528\u4ee5\u53ca\u60a8\u5e0c\u671b\u5728\u8fd9\u91cc\u770b\u5230\u7684\u5176\u4ed6\u4fe1\u606f\u3002\u6211\u4eec\u5e0c\u671b\u5c06\u6b64\u65e5\u5fd7\u8bb0\u5f55\u5668\u4f5c\u4e3a MSBuild \u65b0\u4e00\u6279\u7528\u6237\u4f53\u9a8c\u6539\u8fdb\u7684\u57fa\u7840 &#8211; \u5305\u62ec\u672a\u6765\u7684\u8fdb\u5ea6\u62a5\u544a\u548c\u7ed3\u6784\u5316\u9519\u8bef\u7b49\u65b9\u9762\uff01\u5728\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u8bf7\u901a\u8fc7<\/span><a href=\"https:\/\/aka.ms\/msbuild\/terminal-logger-survey\"><span data-contrast=\"none\">\u8fd9\u4e2a\u8c03\u67e5<\/span><\/a><span data-contrast=\"auto\">\u6216\u901a\u8fc7 MSBuild \u4ee3\u7801\u5e93\u7684<\/span><a href=\"https:\/\/github.com\/dotnet\/msbuild\/discussions\"><span data-contrast=\"none\">\u8ba8\u8bba\u533a<\/span><\/a><span data-contrast=\"auto\">\u5411\u6211\u4eec\u63d0\u4f9b\u53cd\u9988\u3002\u6211\u4eec\u671f\u5f85\u542c\u5230\u5927\u5bb6\u7684\u58f0\u97f3\uff01<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u8fd9\u9879\u5de5\u4f5c\u662f\u7531 Eduardo Villalpando \u542f\u53d1\u5e76\u5f00\u59cb\u7684\uff0c\u4ed6\u662f\u6211\u4eec\u51ac\u5b63\u5b9e\u4e60\u751f\uff0c\u6df1\u5165\u7814\u7a76\u4e86\u95ee\u9898\u5e76\u771f\u6b63\u5e2e\u52a9\u6211\u4eec\u5f00\u8f9f\u4e86\u9053\u8def\u3002\u6ca1\u6709\u4ed6\u7684\u5e2e\u52a9\u548c\u5bf9\u95ee\u9898\u7684\u70ed\u60c5\uff0c\u8fd9\u4e00\u5207\u90fd\u4e0d\u53ef\u80fd\u5b9e\u73b0\uff01<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">SDK\uff1a\u7b80\u5316\u7684\u8f93\u51fa\u8def\u5f84\u66f4\u65b0<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"20\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/designs\/pull\/281\"><span data-contrast=\"none\">https:\/\/github.com\/dotnet\/designs\/pull\/281<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"21\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/sdk\/pull\/31955\"><span data-contrast=\"none\">https:\/\/github.com\/dotnet\/sdk\/pull\/31955<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u5728<\/span><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-dotnet-8-preview-3\/#simplified-output-path\"><span data-contrast=\"none\">\u9884\u89c8\u7248 3<\/span><\/a><span data-contrast=\"auto\">\u4e2d\uff0c\u6211\u4eec\u53d1\u5e03\u4e86 .NET SDK \u9879\u76ee\u7684\u5168\u65b0\u7b80\u5316\u7684\u8f93\u51fa\u8def\u5f84\u5e03\u5c40\uff0c\u5e76\u8bf7\u60a8\u63d0\u4f9b\u5173\u4e8e\u4f7f\u7528\u65b0\u5e03\u5c40\u7684\u53cd\u9988\u548c\u7ecf\u9a8c\u3002\u611f\u8c22\u60a8\u5982\u6b64\u505a\uff01\u60a8\u7684\u53cd\u9988\u5f15\u53d1\u4e86\u8bb8\u591a\u8ba8\u8bba\uff0c\u6839\u636e\u6211\u4eec\u4ece\u5c1d\u8bd5\u66f4\u6539\u7684\u6bcf\u4e2a\u4eba\u90a3\u91cc\u542c\u5230\u7684\u53cd\u9988\uff0c\u6211\u4eec\u5bf9\u6b64\u529f\u80fd\u8fdb\u884c\u4e86\u4ee5\u4e0b\u66f4\u65b0\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"22\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u65b0\u5e03\u5c40\u7684\u9ed8\u8ba4\u8def\u5f84\u4ece <\/span><span data-contrast=\"none\">.artifacts<\/span><span data-contrast=\"auto\"> \u66f4\u6539\u4e3a <\/span><span data-contrast=\"none\">artifacts<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"23\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u6211\u4eec\u5c06\u53d6\u6d88\u4ece Project \u6587\u4ef6\u800c\u4e0d\u662f Directory.Build.props \u4f7f\u7528\u8be5\u529f\u80fd\u7684\u80fd\u529b<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"24\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u6211\u4eec\u901a\u8fc7\u5c06\u6240\u9700\u5c5e\u6027\u4f5c\u4e3a <\/span><span data-contrast=\"none\">dotnet new <\/span><span data-contrast=\"none\">\u7684<\/span> <span data-contrast=\"none\">buildprops<\/span><span data-contrast=\"auto\"> \u6a21\u677f\u7684\u9009\u9879\uff0c\u4f7f\u60a8\u66f4\u5bb9\u6613\u5f00\u59cb\u4f7f\u7528\u6b64\u529f\u80fd<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u6211\u60f3\u6df1\u5165\u4e86\u89e3\u5bfc\u81f4\u6211\u4eec\u8fdb\u884c\u8fd9\u4e9b\u66f4\u6539\u7684\u601d\u8003\u8fc7\u7a0b\u3002\u4f60\u4eec\u51e0\u4e4e\u4e00\u81f4\u652f\u6301\u5c06\u6587\u4ef6\u5939\u540d\u79f0\u4e2d\u7684 . \u5220\u9664\uff0c\u4e3b\u8981\u662f\u4e3a\u4e86\u5728 Unix \u7cfb\u7edf\u4e0a\u7684\u53ef\u89c1\u6027\uff0c\u5728\u90a3\u91cc . \u901a\u5e38\u8868\u793a\u201c\u9690\u85cf\u201d\u7684\u6587\u4ef6\u6216\u6587\u4ef6\u5939\u3002\u6240\u4ee5\u6211\u4eec\u77e5\u9053\u6211\u4eec\u60f3\u505a\u51fa\u8fd9\u4e2a\u6539\u53d8\u3002\u7136\u800c\uff0c\u6211\u4eec\u6700\u521d\u4e0d\u60f3\u4f7f\u7528 artifacts \u4f5c\u4e3a\u6839\u8def\u5f84\u6709\u4e24\u4e2a\u4e3b\u8981\u539f\u56e0\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"25\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">.gitignore \u652f\u6301<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"26\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">.NET SDK \u6587\u4ef6 globbing \u969c\u788d<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u6211\u4eec\u4e0d\u5e0c\u671b\u4eba\u4eec\u53ea\u4e3a\u5c1d\u8bd5\u8fd9\u4e2a\u529f\u80fd\u5c31\u7a81\u7136\u5fc5\u987b\u5904\u7406\u4ed6\u4eec\u7684 <\/span><span data-contrast=\"none\">.gitignore<\/span><span data-contrast=\"auto\"> \u6587\u4ef6\u66f4\u6539\uff0c\u4f46\u7ecf\u8fc7\u4e00\u4e9b\u7814\u7a76\uff0c\u6211\u4eec\u53d1\u73b0\u4e00\u4e9b\u9762\u5411\u672a\u6765\u3001\u6709\u8fdb\u53d6\u5fc3\u7684\u8d21\u732e\u8005\uff08\u8c22\u8c22 @sayedihashimi\uff01\uff09\u5df2\u7ecf\u786e\u4fdd\u5c06 <\/span><span data-contrast=\"none\">artifacts<\/span><span data-contrast=\"auto\"> \u5305\u542b\u5728\u6240\u6709\u5e38\u89c1\u7684 <\/span><span data-contrast=\"none\">.gitignore<\/span><span data-contrast=\"auto\"> \u6587\u4ef6\u6a21\u677f\u4e2d\u3002\u8fd9\u610f\u5473\u7740\u6211\u4eec\u4e0d\u5fc5\u62c5\u5fc3\u7528\u6237\u610f\u5916\u5730\u4fdd\u5b58\u4e8c\u8fdb\u5236\u6587\u4ef6\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6211\u4eec\u8fd8\u4e0d\u60f3\u5728 .NET SDK \u7528\u4e8e\u5728\u9879\u76ee\u4e2d\u67e5\u627e\u8981\u6784\u5efa\u7684\u6e90\u6587\u4ef6\u7684\u9ed8\u8ba4 glob \u6a21\u5f0f\u4e2d\u610f\u5916\u5305\u542b <\/span><span data-contrast=\"none\">artifacts <\/span><span data-contrast=\"auto\">\u8f93\u51fa\u3002\u5982\u679c\u6211\u4eec\u5c06\u6839\u8def\u5f84\u4ece .<\/span><span data-contrast=\"none\">artifacts<\/span><span data-contrast=\"auto\"> \u66f4\u6539\u4e3a <\/span><span data-contrast=\"none\">artifacts<\/span><span data-contrast=\"auto\"> \u5e76\u8ba9\u7528\u6237\u4ece\u9879\u76ee\u6587\u4ef6\u7ea7\u522b\u4f7f\u7528\u65b0\u529f\u80fd\uff0c\u90a3\u4e48\u6211\u4eec\u8fd8\u5fc5\u987b\u66f4\u6539\u6240\u6709\u4f7f SDK \u9879\u76ee\u6587\u4ef6\u5982\u6b64\u7b80\u6d01\u7684\u9ed8\u8ba4\u5305\u542b\u5185\u5bb9\u3002\u8fd9\u770b\u8d77\u6765\u975e\u5e38\u5bb9\u6613\u51fa\u9519\uff0c\u800c\u4e14\u5766\u7387\u5730\u8bf4\uff0c\u5728\u7528\u6237\u4f53\u9a8c\u4e0a\u662f\u4e00\u4e2a\u5931\u8d25\u7684\u9677\u9631\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u5df2\u7ecf\u52a0\u5f3a\u4e86\u4f7f\u7528\u8be5\u529f\u80fd\u7684\u8981\u6c42 &#8211; \u60a8\u73b0\u5728\u5fc5\u987b\u901a\u8fc7 Directory.Build.props \u6587\u4ef6\u9009\u62e9\u8be5\u529f\u80fd\u3002\u8fd9\u5177\u6709\u4f7f\u7279\u6027\u66f4\u7a33\u5b9a\u7684\u526f\u4f5c\u7528\u3002\u5728\u6b64\u66f4\u6539\u4e4b\u524d\uff0c\u63a8\u65ad\u7684\u6839\u6587\u4ef6\u5939\u4f4d\u7f6e\u4f1a\u5728\u521b\u5efa Directory.Build.props \u6587\u4ef6\u65f6\u53d1\u751f\u53d8\u5316\u3002\u73b0\u5728\uff0c\u7531\u4e8e\u5fc5\u987b\u5b58\u5728 Directory.Build.props \u6587\u4ef6\uff0cArtifacts \u8def\u5f84\u7684\u4f4d\u7f6e\u5e94\u4fdd\u6301\u7a33\u5b9a\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u8981\u5c1d\u8bd5\u8be5\u529f\u80fd\u7684\u65b0\u7248\u672c\uff0c\u6211\u4eec\u5df2\u7ecf\u7b80\u5316\u4e86\u751f\u6210\u6b63\u786e\u7684 Directory.Build.props \u6587\u4ef6\uff1a\u53ea\u9700\u8fd0\u884c <\/span><span data-contrast=\"none\">dotnet new buildprops &#8211;use-artifacts<\/span><span data-contrast=\"auto\">\uff0c\u6211\u4eec\u5c06\u4e3a\u60a8\u751f\u6210\u6240\u9700\u7684\u4e00\u5207\u3002\u751f\u6210\u7684 Directory.Build.props \u6587\u4ef6\u5982\u4e0b\u6240\u793a\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">&lt;Project&gt;\u00a0\r\n\u00a0 &lt;!-- See https:\/\/aka.ms\/dotnet\/msbuild\/customize for more details on customizing your build --&gt;\u00a0\r\n\u00a0 &lt;PropertyGroup&gt;\u00a0\r\n\u00a0\u00a0\u00a0&lt;ArtifactsPath&gt;$(MSBuildThisFileDirectory)artifacts&lt;\/ArtifactsPath&gt;\u00a0\r\n\u00a0 &lt;\/PropertyGroup&gt;\u00a0\r\n&lt;\/Project&gt; <\/code><\/pre>\n<p><span data-contrast=\"auto\">\u8bf7\u5c1d\u8bd5\u8fd9\u4e9b\u66f4\u6539\uff0c\u5e76\u7ee7\u7eed\u901a\u8fc7<\/span><a href=\"https:\/\/aka.ms\/dotnet\/sdk\/simplified-output-path-survey\"><span data-contrast=\"none\">\u6211\u4eec\u5bf9\u6b64\u529f\u80fd\u7684\u8c03\u67e5<\/span><\/a><span data-contrast=\"auto\">\u544a\u8bc9\u6211\u4eec\u60a8\u7684\u770b\u6cd5\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u6a21\u677f\u5f15\u64ce\uff1a\u6765\u81ea Nuget.org \u7684\u5305\u7684\u5b89\u5168\u4f53\u9a8c<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 .NET 8 \u4e2d\uff0c\u6211\u4eec\u5c06\u628a NuGet.org \u7684\u51e0\u4e2a\u5b89\u5168\u76f8\u5173\u529f\u80fd\u96c6\u6210\u5230\u6a21\u677f\u5f15\u64ce\u4e2d\uff0c\u5c24\u5176\u662f\u5728 <\/span><span data-contrast=\"none\">dotnet new<\/span><span data-contrast=\"auto\"> \u4f53\u9a8c\u4e2d\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u6539\u8fdb<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"27\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u963b\u6b62\u4ece <\/span><span data-contrast=\"none\">http:\\\\<\/span><span data-contrast=\"auto\"> \u4f9b\u7a3f\u4e2d\u4e0b\u8f7d\u5305\uff0c\u4f46\u5141\u8bb8\u4f7f\u7528 <\/span><span data-contrast=\"none\">&#8211;force<\/span><span data-contrast=\"auto\"> \u8fdb\u884c\u91cd\u5199<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">NuGet \u56e2\u961f\u6709\u4e00\u4e2a\u9010\u6b65\u8fc7\u6e21\u5230\u9ed8\u8ba4\u5b89\u5168\u7acb\u573a\u7684\u8bb0\u5f55\u8ba1\u5212\u3002\u60a8\u53ef\u4ee5\u5728 <\/span><a href=\"https:\/\/devblogs.microsoft.com\/nuget\/https-everywhere\/\"><span data-contrast=\"none\">HTTPS Everywhere<\/span><\/a><span data-contrast=\"auto\"> \u535a\u5ba2\u6587\u7ae0\u4e2d\u4e86\u89e3\u66f4\u591a\u5173\u4e8e\u4ed6\u4eec\u7684\u8ba1\u5212\u4ee5\u53ca\u6240\u6d89\u53ca\u7684\u65f6\u95f4\u7ebf\u3002\u4e3a\u4e86\u652f\u6301\u8fd9\u4e2a\u76ee\u6807\uff0c\u5f53\u4f7f\u7528\u975e HTTPS \u6e90\u65f6\uff0c\u6211\u4eec\u5c06\u9ed8\u8ba4\u5f00\u59cb\u62a5\u9519\u3002\u8fd9\u53ef\u4ee5\u901a\u8fc7 <\/span><span data-contrast=\"none\">&#8211;force<\/span><span data-contrast=\"auto\"> \u5728 .NET 8 \u7684\u65f6\u95f4\u8303\u56f4\u5185\u91cd\u5199\uff0c\u4f46\u5f53\u524d\u8ba1\u5212\u662f\u5728 .NET 9 \u65f6\u95f4\u8303\u56f4\u5185\u5220\u9664\u6b64\u6807\u5fd7\uff0c\u4ee5\u7b26\u5408 HTTPS Everywhere \u65f6\u95f4\u7ebf\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-3.png\"><img decoding=\"async\" class=\"alignnone wp-image-385\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-3-300x40.png\" alt=\"Image dotnet 8 p4 3\" width=\"698\" height=\"93\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-3-300x40.png 300w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-3-1024x136.png 1024w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-3-768x102.png 768w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-3-1536x203.png 1536w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-3-2048x271.png 2048w\" sizes=\"(max-width: 698px) 100vw, 698px\" \/><\/a><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"28\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u5982\u679c\u6a21\u677f\u8f6f\u4ef6\u5305\u5728\u5b89\u88c5\/\u66f4\u65b0\/\u8fc7\u671f\u68c0\u67e5\u65f6\u5b58\u5728\u4efb\u4f55\u6f0f\u6d1e\uff0c\u8bf7\u901a\u77e5\u5ba2\u6237\uff0c\u5e76\u8bf7\u6c42 <\/span><span data-contrast=\"none\">&#8211;force <\/span><span data-contrast=\"none\">\u6765<\/span><span data-contrast=\"auto\">\u5b89\u88c5\u6613\u53d7\u653b\u51fb\u7684\u7248\u672c\u00a0<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-4.png\"><img decoding=\"async\" class=\"alignnone wp-image-384\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-4-300x142.png\" alt=\"Image dotnet 8 p4 4\" width=\"615\" height=\"291\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-4-300x142.png 300w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-4-1024x483.png 1024w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-4-768x363.png 768w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-4-1536x725.png 1536w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-4.png 1913w\" sizes=\"(max-width: 615px) 100vw, 615px\" \/><\/a><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"29\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u5411\u641c\u7d22\u548c\u5378\u8f7d\u547d\u4ee4\u6dfb\u52a0\u6570\u636e\uff0c\u663e\u793a\u6a21\u677f\u662f\u5426\u4ece\u5728 NuGet.org \u4e2d\u5177\u6709<\/span><a href=\"https:\/\/learn.microsoft.com\/nuget\/nuget-org\/id-prefix-reservation\"><span data-contrast=\"none\">\u4fdd\u7559\u524d\u7f00<\/span><\/a><span data-contrast=\"auto\">\u7684\u8f6f\u4ef6\u5305\u4e2d\u5b89\u88c5<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-5.png\"><img decoding=\"async\" class=\"alignnone wp-image-383\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-5-300x71.png\" alt=\"Image dotnet 8 p4 5\" width=\"617\" height=\"146\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-5-300x71.png 300w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-5-1024x243.png 1024w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-5-768x182.png 768w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-5-1536x364.png 1536w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-5-2048x486.png 2048w\" sizes=\"(max-width: 617px) 100vw, 617px\" \/><\/a><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"30\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u6dfb\u52a0\u5173\u4e8e\u6a21\u677f\u5305\u6240\u6709\u8005\u7684\u4fe1\u606f\u3002<\/span><a href=\"https:\/\/learn.microsoft.com\/nuget\/nuget-org\/id-prefix-reservation\"><span data-contrast=\"none\">\u6240\u6709\u6743<\/span><\/a><span data-contrast=\"auto\">\u7ecf\u8fc7 nuget \u95e8\u6237\u9a8c\u8bc1\uff0c\u53ef\u4ee5\u88ab\u89c6\u4e3a\u503c\u5f97\u4fe1\u8d56\u7684\u7279\u5f81<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-6.png\"><img decoding=\"async\" class=\"alignnone wp-image-382\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-6-300x154.png\" alt=\"Image dotnet 8 p4 6\" width=\"616\" height=\"316\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-6-300x154.png 300w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-6-1024x525.png 1024w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-6-768x394.png 768w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-6.png 1220w\" sizes=\"(max-width: 616px) 100vw, 616px\" \/><\/a><\/p>\n<p><b><span data-contrast=\"auto\">NuGet\uff1a\u5728 Linux \u4e0a\u7684\u7b7e\u540d\u5305\u9a8c\u8bc1<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u4ece .NET 8 \u9884\u89c8\u7248 4 SDK \u5f00\u59cb\uff0cNuGet \u5c06\u9ed8\u8ba4\u5728 Linux \u4e0a<\/span><a href=\"https:\/\/learn.microsoft.com\/nuget\/reference\/signed-packages-reference\"><span data-contrast=\"none\">\u9a8c\u8bc1\u7b7e\u540d\u5305<\/span><\/a><span data-contrast=\"auto\">\u3002\u9a8c\u8bc1\u5728 Windows \u4e0a\u4fdd\u6301\u542f\u7528\uff0c\u5e76\u5728 macOS \u4e0a\u7981\u7528\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5bf9\u4e8e\u5927\u591a\u6570 Linux \u7528\u6237\uff0c<\/span><a href=\"https:\/\/github.com\/dotnet\/sdk\/blob\/main\/src\/Layout\/redist\/trustedroots\/README.md\"><span data-contrast=\"none\">\u9a8c\u8bc1\u5e94\u8be5\u900f\u660e\u5730\u8fdb\u884c<\/span><\/a><span data-contrast=\"auto\">\u3002\u7136\u800c\uff0c\u4f4d\u4e8e <\/span><span data-contrast=\"none\">\/etc\/pki\/ca-trust\/extracted\/pem\/objsign-ca-bundle.pem<\/span><span data-contrast=\"auto\"> \u7684\u73b0\u6709\u6839\u8bc1\u4e66\u675f\u7684\u7528\u6237\u53ef\u80fd\u4f1a\u770b\u5230\u4f34\u968f <\/span><a href=\"https:\/\/learn.microsoft.com\/nuget\/reference\/errors-and-warnings\/nu3042\"><span data-contrast=\"none\">NU3042<\/span><\/a><span data-contrast=\"auto\"> \u7684\u4fe1\u4efb\u5931\u8d25\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u5c06\u73af\u5883\u53d8\u91cf <\/span><span data-contrast=\"none\">DOTNET_NUGET_SIGNATURE_VERIFICATION<\/span><span data-contrast=\"auto\"> \u8bbe\u7f6e\u4e3a <\/span><span data-contrast=\"none\">false<\/span><span data-contrast=\"auto\"> \u6765\u9009\u62e9\u4e0d\u8fdb\u884c\u9a8c\u8bc1\u3002\u8bf7<\/span><a href=\"https:\/\/github.com\/NuGet\/Home\/issues\"><span data-contrast=\"none\">\u63d0\u4f9b\u60a8\u7684\u53cd\u9988\u4ee5\u5e2e\u52a9 NuGet \u56e2\u961f\u6539\u8fdb Linux \u4e0a\u7684\u4f53\u9a8c<\/span><\/a><span data-contrast=\"auto\">\uff01<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u9605 <\/span><a href=\"https:\/\/github.com\/dotnet\/core\/issues\/7688\"><span data-contrast=\"none\">https:\/\/github.com\/dotnet\/core\/issues\/7688<\/span><\/a><span data-contrast=\"auto\">\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">NuGet\uff1a\u5ba1\u6838\u8f6f\u4ef6\u5305\u4f9d\u8d56\u5173\u7cfb\u4ee5\u67e5\u627e\u5b89\u5168\u6f0f\u6d1e<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"31\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/NuGet\/Home\/issues\/8087\"><span data-contrast=\"none\">https:\/\/github.com\/NuGet\/Home\/issues\/8087<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"32\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/NuGet\/Home\/pull\/12310\"><span data-contrast=\"none\">https:\/\/github.com\/NuGet\/Home\/pull\/12310<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u5f53\u60a8\u9009\u62e9\u4f7f\u7528 NuGet \u5b89\u5168\u5ba1\u8ba1\u65f6\uff0cdotnet restore \u5c06\u751f\u6210\u4e00\u4e2a\u5b89\u5168\u6f0f\u6d1e\u62a5\u544a\uff0c\u5176\u4e2d\u5305\u62ec\u53d7\u5f71\u54cd\u7684\u5305\u540d\u79f0\u3001\u6f0f\u6d1e\u4e25\u91cd\u6027\u4ee5\u53ca\u6307\u5411\u54a8\u8be2\u66f4\u591a\u8be6\u7ec6\u4fe1\u606f\u7684\u94fe\u63a5\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u542f\u7528\u5b89\u5168\u5ba1\u8ba1<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5f53\u60a8\u5e0c\u671b\u63a5\u6536\u5b89\u5168\u5ba1\u8ba1\u62a5\u544a\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728 .csproj \u6216\u4f5c\u4e3a\u9879\u76ee\u7684\u4e00\u90e8\u5206\u8fdb\u884c\u8bc4\u4f30\u7684 MSBuild \u6587\u4ef6\u4e2d\u8bbe\u7f6e\u4ee5\u4e0b MSBuild \u5c5e\u6027\u6765\u9009\u62e9\u52a0\u5165\u6b64\u4f53\u9a8c\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">&lt;NuGetAudit&gt;true&lt;\/NuGetAudit&gt;\u00a0<\/code><\/pre>\n<p><span data-contrast=\"auto\">\u5f53\u60a8\u5e0c\u671b\u63a5\u6536\u5b89\u5168\u5ba1\u8ba1\u62a5\u544a\u65f6\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728 .csproj \u6216\u4f5c\u4e3a\u9879\u76ee\u7684\u4e00\u90e8\u5206\u8fdb\u884c\u8bc4\u4f30\u7684 MSBuild \u6587\u4ef6\u4e2d\u8bbe\u7f6e\u4ee5\u4e0b MSBuild \u5c5e\u6027\u6765\u9009\u62e9\u52a0\u5165\u6b64\u4f53\u9a8c\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">&lt;packageSources&gt;\u00a0\r\n\u00a0\u00a0\u00a0 &lt;add key=\"nuget.org\" value=\"https:\/\/api.nuget.org\/v3\/index.json\" protocolVersion=\"3\" \/&gt;\u00a0\r\n&lt;\/packageSources&gt;\u00a0<\/code><\/pre>\n<p><b><span data-contrast=\"auto\">dotnet add package<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5f53\u60a8\u5c1d\u8bd5\u6dfb\u52a0\u5177\u6709\u5df2\u77e5\u6f0f\u6d1e\u7684\u5305\u65f6\uff0cdotnet restore \u5c06\u9690\u5f0f\u8fd0\u884c\u5e76\u901a\u8fc7\u8b66\u544a\u8ba9\u60a8\u77e5\u9053\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-7.png\"><img decoding=\"async\" class=\"alignnone wp-image-381\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-7-300x77.png\" alt=\"Image dotnet 8 p4 7\" width=\"635\" height=\"163\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-7-300x77.png 300w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-7-1024x264.png 1024w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-7-768x198.png 768w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-7-1536x396.png 1536w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-7.png 2048w\" sizes=\"(max-width: 635px) 100vw, 635px\" \/><\/a><\/p>\n<p><b><span data-contrast=\"auto\">dotnet restore<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:260,&quot;335559739&quot;:260,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5f53\u60a8\u901a\u8fc7 dotnet restore \u6062\u590d\u8f6f\u4ef6\u5305\u65f6\uff0c\u60a8\u5c06\u770b\u5230\u6bcf\u4e2a\u53d7\u5f71\u54cd\u7684\u8f6f\u4ef6\u5305\u548c\u5efa\u8bae\u7684\u8b66\u544a\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-8.png\"><img decoding=\"async\" class=\"alignnone wp-image-380\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-8-300x125.png\" alt=\"Image dotnet 8 p4 8\" width=\"636\" height=\"265\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-8-300x125.png 300w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-8-1024x428.png 1024w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-8-768x321.png 768w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-8-1536x642.png 1536w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-8.png 2048w\" sizes=\"(max-width: 636px) 100vw, 636px\" \/><\/a><\/p>\n<p><b><span data-contrast=\"auto\">Warning codes<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:260,&quot;335559739&quot;:260,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<table data-tablestyle=\"MsoNormalTable\" data-tablelook=\"0\" aria-rowcount=\"5\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"0\"><b><span data-contrast=\"auto\">Warning Code<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><b><span data-contrast=\"auto\">Severity<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"2\">\n<td data-celllook=\"0\"><span data-contrast=\"auto\">NU1901<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">low<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"3\">\n<td data-celllook=\"0\"><span data-contrast=\"auto\">NU1902<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">moderate<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"4\">\n<td data-celllook=\"0\"><span data-contrast=\"auto\">NU1903<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">high<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"5\">\n<td data-celllook=\"0\"><span data-contrast=\"auto\">NU1904<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">critical<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u8bbe\u7f6e\u5b89\u5168\u5ba1\u6838\u7ea7\u522b<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u60a8\u53ef\u4ee5\u5c06 <\/span><span data-contrast=\"none\">&lt;NuGetAuditLevel&gt; <\/span><span data-contrast=\"auto\">MSBuild \u5c5e\u6027\u8bbe\u7f6e\u4e3a\u671f\u671b\u7684\u5ba1\u6838\u5931\u8d25\u7ea7\u522b\u3002\u53ef\u9009\u503c\u6709 <\/span><span data-contrast=\"none\">low<\/span><span data-contrast=\"auto\">\u3001<\/span><span data-contrast=\"none\">moderate<\/span><span data-contrast=\"auto\">\u3001<\/span><span data-contrast=\"none\">high<\/span><span data-contrast=\"auto\"> \u548c <\/span><span data-contrast=\"none\">critical<\/span><span data-contrast=\"auto\">\u3002\u4f8b\u5982\uff0c\u5982\u679c\u60a8\u53ea\u60f3\u67e5\u770b <\/span><span data-contrast=\"none\">moderate<\/span><span data-contrast=\"auto\">\u3001<\/span><span data-contrast=\"none\">high<\/span><span data-contrast=\"auto\"> \u548c <\/span><span data-contrast=\"none\">critical<\/span><span data-contrast=\"auto\"> \u5efa\u8bae\uff0c\u5219\u53ef\u4ee5\u8bbe\u7f6e\u4ee5\u4e0b\u5185\u5bb9\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">&lt;NuGetAuditLevel&gt;moderate&lt;\/NuGetAuditLevel&gt;\u00a0<\/code><\/pre>\n<p><b><span data-contrast=\"auto\">\u5e93\uff1aUTF8 \u6539\u8fdb<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 .NET 8 Preview 4 \u4e2d\uff0c\u6211\u4eec\u5f15\u5165\u4e86\u65b0\u7684 <\/span><span data-contrast=\"none\">IUtf8SpanFormattable<\/span><span data-contrast=\"auto\"> \u63a5\u53e3\uff0c\u5c31\u50cf\u5b83\u7684\u8868\u4eb2 <\/span><span data-contrast=\"none\">ISpanFormattable<\/span><span data-contrast=\"auto\"> \u4e00\u6837\uff0c\u53ef\u4ee5\u5728\u7c7b\u578b\u4e0a\u5b9e\u73b0\uff0c\u4ee5\u4fbf\u5c06\u8be5\u7c7b\u578b\u7684\u7c7b\u4f3c\u5b57\u7b26\u4e32\u8868\u793a\u5f62\u5f0f\u5199\u5165\u76ee\u6807 span\u3002<\/span><span data-contrast=\"none\">ISpanFormattable<\/span><span data-contrast=\"auto\"> \u9762\u5411 UTF16 \u548c <\/span><span data-contrast=\"none\">Span&lt;char&gt;<\/span><span data-contrast=\"auto\">\uff0c\u800c IUtf8SpanFormattable \u5219\u9762\u5411 UTF8 \u548c <\/span><span data-contrast=\"none\">Span&lt;byte&gt;<\/span><span data-contrast=\"auto\">\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u6240\u6709\u539f\u59cb\u7c7b\u578b\uff08\u4ee5\u53ca\u5176\u4ed6\u7c7b\u578b\uff09\u90fd\u5df2\u5b9e\u73b0\u8fd9\u4e2a\u63a5\u53e3\uff0c\u65e0\u8bba\u662f\u9488\u5bf9 <\/span><span data-contrast=\"none\">string<\/span><span data-contrast=\"auto\">\u3001<\/span><span data-contrast=\"none\">Span&lt;char&gt;<\/span><span data-contrast=\"auto\"> \u8fd8\u662f <\/span><span data-contrast=\"none\">Span&lt;byte&gt;<\/span><span data-contrast=\"auto\">\uff0c\u90fd\u4f7f\u7528\u76f8\u540c\u7684\u5171\u4eab\u903b\u8f91\uff08\u591a\u4e8f\u4e86\u9759\u6001\u62bd\u8c61\u63a5\u53e3\uff09\uff0c\u8fd9\u610f\u5473\u7740\u5b83\u5b8c\u5168\u652f\u6301\u6240\u6709\u683c\u5f0f\uff08\u5305\u62ec\u5728 .NET 8 Preview 4 \u4e2d\u65b0\u589e\u7684 \u201cB\u201d \u4e8c\u8fdb\u5236\u8bf4\u660e\u7b26\uff09\u548c\u6240\u6709\u533a\u57df\u8bbe\u7f6e\u3002\u8fd9\u610f\u5473\u7740\u60a8\u73b0\u5728\u53ef\u4ee5\u76f4\u63a5\u4ece<\/span> <span data-contrast=\"none\">Byte<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">Complex<\/span><span data-contrast=\"none\">\u202f\u3001<\/span><span data-contrast=\"none\">Char<\/span><span data-contrast=\"none\">\u202f\u3001<\/span><span data-contrast=\"none\">DateOnly<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">DateTime<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">DateTimeOffset<\/span><span data-contrast=\"none\">\u202f\u3001<\/span><span data-contrast=\"none\">Decimal<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">Double<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">Guid<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">Half<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">IPAddress<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">IPNetwork<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">Int16<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">Int32<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">Int64<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">Int128<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">IntPtr<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">NFloat<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">SByte<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">Single<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">Rune<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">TimeOnly<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">TimeSpan<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">UInt16<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">UInt32<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">UInt64<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">UInt128<\/span><span data-contrast=\"none\">\u3001<\/span><span data-contrast=\"none\">UIntPtr<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"auto\">\uff0c\u4ee5\u53ca<\/span> <span data-contrast=\"none\">Version<\/span><span data-contrast=\"auto\">\u683c\u5f0f\u5316\u4e3a <\/span><span data-contrast=\"none\">UTF8\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u6b64\u5916\uff0c\u65b0\u7684 <\/span><span data-contrast=\"none\">Utf8.TryWrite<\/span><span data-contrast=\"none\"> \u65b9\u6cd5\u73b0\u5728\u4e3a\u73b0\u6709\u7684\u57fa\u4e8e UTF16 \u7684 <\/span><span data-contrast=\"none\">MemoryExtensions.TryWrite<\/span><span data-contrast=\"none\"> \u65b9\u6cd5\u63d0\u4f9b\u4e86\u57fa\u4e8e UTF8 \u7684\u5bf9\u5e94\u65b9\u6cd5\u3002\u8fd9\u4e9b\u65b9\u6cd5\u4f9d\u8d56\u4e8e <\/span><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/string-interpolation-in-c-10-and-net-6\/\"><span data-contrast=\"none\">.NET 6 \u548c C# 10 \u4e2d\u5f15\u5165\u7684\u63d2\u503c\u5b57\u7b26\u4e32<\/span><span data-contrast=\"none\">\u5904\u7406\u5668\u652f\u6301<\/span><\/a><span data-contrast=\"none\">\uff0c\u4f7f\u60a8\u53ef\u4ee5\u4f7f\u7528\u63d2\u503c\u5b57\u7b26\u4e32\u8bed\u6cd5\u5c06\u590d\u6742\u8868\u8fbe\u5f0f\u76f4\u63a5\u683c\u5f0f\u5316\u4e3a UTF8 \u5b57\u8282\u7684\u8de8\u5ea6\uff0c\u4f8b\u5982\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">static bool FormatHexVersion(short major, short minor, short build, short revision, Span&lt;byte&gt; utf8Bytes, out int bytesWritten) =&gt;\u00a0\r\n\u00a0\u00a0\u00a0 Utf8.TryWrite(utf8Bytes, CultureInfo.InvariantCulture, $\"{major:X4}.{minor:X4}.{build:X4}.{revision:X4}\", out bytesWritten);\u00a0<\/code><\/pre>\n<p><span data-contrast=\"auto\">\u5b9e\u73b0\u53ef\u8bc6\u522b\u683c\u5f0f\u503c\u4e0a\u7684 <\/span><span data-contrast=\"none\">IUtf8SpanFormattable<\/span><span data-contrast=\"auto\">\uff0c\u5e76\u4f7f\u7528\u5b83\u4eec\u7684\u5b9e\u73b0\u76f4\u63a5\u5c06 UTF8 \u8868\u793a\u5199\u5165\u76ee\u6807\u8de8\u5ea6\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5b9e\u73b0\u8fd8\u5229\u7528\u4e86\u65b0\u65b9\u6cd5 <\/span><span data-contrast=\"none\">Encoding.TryGetBytes<\/span><span data-contrast=\"auto\">\uff0c\u8be5\u65b9\u6cd5\u53ca\u5176\u5bf9\u5e94\u65b9\u6cd5 <\/span><span data-contrast=\"none\">Encoding.TryGetChars<\/span><span data-contrast=\"auto\"> \u652f\u6301\u5c06\u7f16\u7801\/\u89e3\u7801\u8f93\u51fa\u5230\u76ee\u6807\u8de8\u5ea6\uff0c\u53ea\u8981\u8de8\u5ea6\u8db3\u591f\u957f\u4ee5\u5bb9\u7eb3\u751f\u6210\u7684\u72b6\u6001\uff0c\u5e76\u5728\u957f\u5ea6\u4e0d\u8db3\u65f6\u8fd4\u56de false \u800c\u4e0d\u662f\u629b\u51fa\u5f02\u5e38\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6211\u4eec\u9884\u8ba1\u5728\u540e\u7eed\u7684 .NET 8 \u9884\u89c8\u7248\u672c\u4e2d\u51fa\u73b0\u66f4\u591a UTF8 \u7684\u6539\u8fdb\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\u6b64\u529f\u80fd\u7684\u6027\u80fd\u6539\u8fdb\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u5f15\u5165\u65f6\u95f4\u62bd\u8c61<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">TimeProvider \u62bd\u8c61\u7c7b\u7684\u5f15\u5165\u589e\u52a0\u4e86\u65f6\u95f4\u62bd\u8c61\uff0c\u4f7f\u5f97\u5728\u6d4b\u8bd5\u573a\u666f\u4e2d\u53ef\u4ee5\u6a21\u62df\u65f6\u95f4\u3002\u8fd9\u4e2a\u529f\u80fd\u4e5f\u88ab\u5176\u4ed6\u4f9d\u8d56\u65f6\u95f4\u63a8\u79fb\u7684\u7279\u6027\u6240\u652f\u6301\uff0c\u4f8b\u5982 <\/span><span data-contrast=\"none\">Task.Delay<\/span><span data-contrast=\"auto\"> \u548c <\/span><span data-contrast=\"none\">Task.Async<\/span><span data-contrast=\"auto\">\u3002\u8fd9\u610f\u5473\u7740\u5373\u4f7f\u662f Task \u64cd\u4f5c\u4e5f\u53ef\u4ee5\u8f7b\u677e\u5730\u4f7f\u7528\u65f6\u95f4\u62bd\u8c61\u8fdb\u884c\u6a21\u62df\u3002\u62bd\u8c61\u652f\u6301\u83b7\u53d6\u672c\u5730\u548c UTC \u65f6\u95f4\uff0c\u83b7\u53d6\u6027\u80fd\u6d4b\u91cf\u7684\u65f6\u95f4\u6233\u4ee5\u53ca\u521b\u5efa\u8ba1\u65f6\u5668\u7b49\u57fa\u672c\u65f6\u95f4\u64cd\u4f5c\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">public abstract class TimeProvider\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 public static TimeProvider System { get; }\u00a0\r\n\u00a0\u00a0\u00a0 protected TimeProvider()\u00a0\u00a0\r\n\u00a0\u00a0\u00a0 public virtual DateTimeOffset GetUtcNow()\u00a0\r\n\u00a0\u00a0\u00a0 public DateTimeOffset GetLocalNow()\u00a0\r\n\u00a0\u00a0\u00a0 public virtual TimeZoneInfo LocalTimeZone { get; }\u00a0\r\n\u00a0\u00a0\u00a0 public virtual long TimestampFrequency { get; }\u00a0\r\n\u00a0\u00a0\u00a0 public virtual long GetTimestamp()\u00a0\r\n\u00a0\u00a0\u00a0 public TimeSpan GetElapsedTime(long startingTimestamp)\u00a0\r\n\u00a0\u00a0\u00a0 public TimeSpan GetElapsedTime(long startingTimestamp, long endingTimestamp)\u00a0\r\n\u00a0\u00a0\u00a0 public virtual ITimer CreateTimer(TimerCallback callback, object? state,TimeSpan dueTime, TimeSpan period)\u00a0\r\n}\u00a0\r\n\r\npublic interface ITimer : IDisposable, IAsyncDisposable\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 bool Change(TimeSpan dueTime, TimeSpan period);\u00a0\r\n}\u00a0\r\n\r\npublic partial class CancellationTokenSource : IDisposable\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 public CancellationTokenSource(TimeSpan delay, TimeProvider timeProvider)\u00a0\r\n}\u00a0\r\n\r\npublic sealed partial class PeriodicTimer : IDisposable\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 public PeriodicTimer(TimeSpan period, TimeProvider timeProvider)\u00a0\u00a0\r\n}\u00a0\r\n\r\npublic partial class Task : IAsyncResult, IDisposable\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 public static Task Delay(System.TimeSpan delay, System.TimeProvider timeProvider)\u00a0\r\n\u00a0\u00a0\u00a0 public static Task Delay(System.TimeSpan delay, System.TimeProvider timeProvider, System.Threading.CancellationToken cancellationToken)\u00a0\r\n\u00a0\u00a0\u00a0 public Task WaitAsync(TimeSpan timeout, TimeProvider timeProvider)\u00a0\r\n\u00a0\u00a0\u00a0 public Task WaitAsync(TimeSpan timeout, TimeProvider timeProvider, CancellationToken cancellationToken)\u00a0\u00a0\r\n}\u00a0\r\n\r\npublic partial class Task&lt;TResult&gt; : Task\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 public new Task&lt;TResult&gt; WaitAsync(TimeSpan timeout, TimeProvider timeProvider)\u00a0\r\n\u00a0\u00a0\u00a0 public new Task&lt;TResult&gt; WaitAsync(TimeSpan timeout, TimeProvider timeProvider, CancellationToken cancellationToken)\u00a0\u00a0\r\n} <\/code><\/pre>\n<p><span data-contrast=\"auto\">\u6b64\u5916\uff0c\u6211\u4eec\u5728 .NET 8.0 \u4e2d\u63d0\u4f9b\u4e86\u62bd\u8c61\uff0c\u5e76\u521b\u5efa\u4e86\u4e00\u4e2a\u540d\u4e3aMicrosoft.Bcl.TimeProvider \u7684\u7f51\u7edc\u6807\u51c62.0\u5e93\u3002\u8fd9\u4f7f\u5f97\u53ef\u4ee5\u5728 .NET Framework \u4ee5\u53ca .NET \u65e9\u671f\u7248\u672c\u7684\u652f\u6301\u7248\u672c\u4e0a\u4f7f\u7528\u62bd\u8c61\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">namespace System.Threading.Tasks\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 public static class TimeProviderTaskExtensions\u00a0\r\n\u00a0\u00a0\u00a0 {\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 public static Task Delay(this TimeProvider timeProvider, TimeSpan delay, CancellationToken cancellationToken = default)\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 public static Task&lt;TResult&gt; WaitAsync&lt;TResult&gt;(this Task&lt;TResult&gt; task, TimeSpan timeout, TimeProvider timeProvider, CancellationToken cancellationToken = default)\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 public static Tasks.Task WaitAsync(this Task task, TimeSpan timeout, TimeProvider timeProvider, CancellationToken cancellationToken = default)\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 public static CancellationTokenSource CreateCancellationTokenSource(this TimeProvider timeProvider, TimeSpan delay)\u00a0\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n} <\/code><\/pre>\n<p><b><span data-contrast=\"auto\">\u7528\u4f8b<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:260,&quot;335559739&quot;:260,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">\/\/\u00a0 Get System time\u00a0\r\nDateTimeOffset utcNow= TimeProvider.System.GetUtcNow();\u00a0\r\nDateTimeOffset localNow = TimeProvider.System.GetLocalNow();\u00a0\r\n\u00a0\r\n\/\/ Create a time provider that work with a time zone different than the local time zone\u00a0\u00a0\r\nprivate class ZonedTimeProvider : TimeProvider\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 private TimeZoneInfo _zoneInfo;\u00a0\r\n\u00a0\u00a0\u00a0 public ZonedTimeProvider(TimeZoneInfo zoneInfo) : base()\u00a0\r\n\u00a0\u00a0\u00a0 {\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 _zoneInfo = zoneInfo ?? TimeZoneInfo.Local;\u00a0\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\u00a0\u00a0\u00a0 public override TimeZoneInfo LocalTimeZone { get =&gt; _zoneInfo; }\u00a0\r\n\u00a0\u00a0\u00a0 public static TimeProvider FromLocalTimeZone(TimeZoneInfo zoneInfo) =&gt; new ZonedTimeProvider(zoneInfo);\u00a0\r\n}\u00a0\r\n\u00a0\r\n\/\/ Create a time using a time provider\u00a0\u00a0\r\nITimer timer = timeProvider.CreateTimer(callBack, state, delay, Timeout.InfiniteTimeSpan);\u00a0\r\n\u00a0\r\n\/\/ Measure a period using the system time provider\u00a0\u00a0\r\nlong providerTimestamp1 = TimeProvider.System.GetTimestamp();\u00a0\r\nlong providerTimestamp2 = TimeProvider.System.GetTimestamp();\u00a0\r\nvar period = GetElapsedTime(providerTimestamp1, providerTimestamp2); <\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/36617\"><span data-contrast=\"none\">https:\/\/github.com\/dotnet\/runtime\/issues\/36617<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">System.Runtime.Intrinsics.Vector512 \u548c AVX-512<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u81ea\u4ece\u6211\u4eec\u5728 .NET Framework \u4e2d<\/span><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/update-to-simd-support\/\"><span data-contrast=\"none\">\u9996\u6b21\u5f15\u5165<\/span><\/a><span data-contrast=\"auto\">\u652f\u6301\u4ee5\u6765\uff0cSIMD \u652f\u6301\u5df2\u7ecf\u6210\u4e3a .NET \u591a\u5e74\u6765\u7684\u57fa\u672c\u529f\u80fd\u3002\u5728 .NET Core 3.0 \u4e2d\uff0c\u6211\u4eec<\/span><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/hardware-intrinsics-in-net-core\/\"><span data-contrast=\"none\">\u6269\u5c55\u4e86<\/span><\/a><span data-contrast=\"auto\">\u5bf9 x86\/x64 \u5e73\u53f0\u7279\u5b9a\u786c\u4ef6\u5185\u5728 API \u7684\u652f\u6301\u3002\u6211\u4eec\u5728 .NET 5 \u4e2d\u518d\u6b21\u6269\u5c55\u4e86\u8fd9\u4e00\u70b9\uff0c\u652f\u6301 Arm64\uff0c\u5e76\u5728 .NET 7 \u4e2d\u5f15\u5165\u8de8\u5e73\u53f0\u786c\u4ef6\u5185\u5728\u529f\u80fd\u3002.NET 8 \u4e5f\u4e0d\u4f8b\u5916\uff0c\u7ee7\u7eed\u901a\u8fc7\u5f15\u5165 <\/span><span data-contrast=\"none\">System.Runtime.Intrinsics.Vector512&lt;T&gt;<\/span><span data-contrast=\"auto\"> \u53ca\u5176\u5728\u5177\u6709 AVX-512 \u652f\u6301\u7684 x86\/x64 \u786c\u4ef6\u4e0a\u7684\u52a0\u901f\u6765\u8fdb\u4e00\u6b65\u63d0\u9ad8\u6211\u4eec\u7684\u652f\u6301\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><span data-contrast=\"none\">AVX-512<\/span><span data-contrast=\"auto\"> \u672c\u8eab\u5e26\u6765\u4e86\u51e0\u4e2a\u5173\u952e\u529f\u80fd\uff0c\u5176\u4e2d Preview 4 \u6dfb\u52a0\u4e86\u5bf9\u524d\u4e09\u4e2a\u529f\u80fd\u7684\u652f\u6301\u3002\u6700\u540e\u4e00\u4e2a\u4ecd\u7136\u662f\u6211\u4eec\u5e0c\u671b\u5728\u672a\u6765\u7684\u8fdb\u5c55\u4e2d\u5206\u4eab\u66f4\u591a\u8be6\u7ec6\u4fe1\u606f\u7684\u5de5\u4f5c\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"33\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u652f\u6301 512 \u4f4d\u5411\u91cf\u64cd\u4f5c<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"34\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u652f\u6301\u989d\u5916\u7684 16 \u4e2a SIMD \u5bc4\u5b58\u5668<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"35\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u652f\u6301 128 \u4f4d\u3001256 \u4f4d\u548c 512 \u4f4d\u5411\u91cf\u53ef\u7528\u7684\u989d\u5916\u6307\u4ee4<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"36\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u652f\u6301\u63a9\u7801\u5411\u91cf\u64cd\u4f5c<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u5982\u679c\u60a8\u7684\u786c\u4ef6\u652f\u6301\u8fd9\u4e2a\u529f\u80fd\uff0c\u90a3\u4e48 <\/span><span data-contrast=\"none\">Vector512.IsHardwareAccelerated<\/span><span data-contrast=\"auto\"> \u5c06\u62a5\u544a <\/span><span data-contrast=\"none\">true<\/span><span data-contrast=\"auto\">\u3002\u6211\u4eec\u8fd8\u5728 <\/span><span data-contrast=\"none\">System.Runtime.Intrinsics.X86<\/span><span data-contrast=\"auto\"> \u547d\u540d\u7a7a\u95f4\u4e0b\u66b4\u9732\u4e86\u51e0\u4e2a\u5e73\u53f0\u7279\u5b9a\u7684\u7c7b\uff0c\u5305\u62ec <\/span><span data-contrast=\"none\">Avx512F<\/span><span data-contrast=\"auto\">\uff08\u57fa\u7840\uff09\u3001<\/span><span data-contrast=\"none\">Avx512BW<\/span><span data-contrast=\"auto\">\uff08\u5b57\u8282\u548c\u5b57\uff09\u3001<\/span><span data-contrast=\"none\">Avx512CD<\/span><span data-contrast=\"auto\">\uff08\u51b2\u7a81\u68c0\u6d4b\uff09\u3001<\/span><span data-contrast=\"none\">Avx512DQ<\/span><span data-contrast=\"auto\">\uff08\u53cc\u5b57\u548c\u56db\u5b57\uff09\u4ee5\u53ca <\/span><span data-contrast=\"none\">Avx512Vbmi<\/span><span data-contrast=\"auto\">\uff08\u5411\u91cf\u5b57\u8282\u64cd\u4f5c\u6307\u4ee4\uff09\u3002\u8fd9\u4e9b\u7c7b\u7684\u5f62\u5f0f\u548c\u5e03\u5c40\u4e0e\u5176\u4ed6 ISA \u76f8\u4f3c\uff0c\u5b83\u4eec\u66b4\u9732\u4e86\u4e00\u4e2a <\/span><span data-contrast=\"none\">IsSupported<\/span><span data-contrast=\"auto\"> \u5c5e\u6027\u548c\u4e00\u4e2a\u4ec5\u7528\u4e8e 64 \u4f4d\u8fdb\u7a0b\u7684\u6307\u4ee4\u5d4c\u5957\u7c7b\u3002\u6b64\u5916\uff0c\u6211\u4eec\u73b0\u5728\u5728\u6bcf\u4e2a\u7c7b\u4e2d\u90fd\u6709\u4e00\u4e2a\u5d4c\u5957\u7c7b\uff0c\u8be5\u7c7b\u4e3a\u76f8\u5e94\u7684\u6307\u4ee4\u96c6\u516c\u5f00\u4e86 <\/span><span data-contrast=\"none\">Avx512VL<\/span><span data-contrast=\"auto\">\uff08\u5411\u91cf\u957f\u5ea6\uff09\u6269\u5c55\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u7531\u4e8e\u4e0a\u9762\u5217\u51fa\u7684\u7b2c\u4e8c\u548c\u7b2c\u4e09\u4e2a\u5173\u952e\u529f\u80fd\uff0c\u5373\u4f7f\u60a8\u5728\u4ee3\u7801\u4e2d\u6ca1\u6709\u660e\u786e\u4f7f\u7528 <\/span><span data-contrast=\"none\">Vector512<\/span><span data-contrast=\"auto\"> \u6216\u7279\u5b9a\u7684 <\/span><span data-contrast=\"none\">Avx512F<\/span><span data-contrast=\"auto\"> \u6307\u4ee4\uff0c\u60a8\u4ecd\u7136\u53ef\u80fd\u4ece\u8fd9\u4e2a\u529f\u80fd\u4e2d\u53d7\u76ca\u3002\u8fd9\u662f\u56e0\u4e3a\u5f53\u4f7f\u7528 <\/span><span data-contrast=\"none\">Vector128&lt;T&gt;<\/span><span data-contrast=\"auto\"> \u6216 <\/span><span data-contrast=\"none\">Vector256&lt;T&gt;<\/span><span data-contrast=\"auto\"> \u65f6\uff0cJIT \u80fd\u591f\u9690\u5f0f\u5730\u5229\u7528\u8fd9\u4e9b\u529f\u80fd\uff0c\u5305\u62ec BCL \u4e2d\u4f7f\u7528\u786c\u4ef6\u5185\u5728\u51fd\u6570\u7684\u6240\u6709\u5730\u65b9\uff0c\u5982 <\/span><span data-contrast=\"none\">Span&lt;T&gt;<\/span><span data-contrast=\"auto\"> \u548c <\/span><span data-contrast=\"none\">ReadOnlySpan&lt;T&gt;<\/span><span data-contrast=\"auto\"> \u4e2d\u516c\u5f00\u7684\u5927\u591a\u6570\u64cd\u4f5c\uff0c\u8bb8\u591a\u539f\u59cb\u7c7b\u578b\u7684\u6570\u5b66 API \u7b49\u7b49\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u8fd9\u4e2a\u529f\u80fd\u5df2\u7ecf\u6709\u8bb8\u591a <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pulls?q=is%253Apr+label%253Aarch-avx512+is%253Aclosed+\"><span data-contrast=\"none\">Pull Requests<\/span><\/a><span data-contrast=\"auto\"> \u6295\u5165\u4f7f\u7528\uff0c\u5b83\u662f\u8bb8\u591a\u4eba\u7684\u52aa\u529b\u6210\u679c\uff0c\u5c24\u5176\u662f <\/span><a href=\"https:\/\/github.com\/anthonycanino,\"><span data-contrast=\"none\">https:\/\/github.com\/anthonycanino,<\/span><\/a> <a href=\"https:\/\/github.com\/DeepakRajendrakumaran\"><span data-contrast=\"none\">https:\/\/github.com\/DeepakRajendrakumaran<\/span><\/a><span data-contrast=\"auto\"> \u548c <\/span><a href=\"https:\/\/github.com\/jkrishnavs\"><span data-contrast=\"none\">https:\/\/github.com\/jkrishnavs<\/span><\/a><span data-contrast=\"auto\">\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Native AOT \u6539\u8fdb<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6211\u4eec\u5df2\u7ecf\u66f4\u65b0\u4e86\u9ed8\u8ba4 <\/span><span data-contrast=\"none\">console<\/span> <span data-contrast=\"auto\">\u6a21\u677f\u5e76\u6dfb\u52a0\u4e86\u5bf9 AOT \u7684\u5f00\u7bb1\u5373\u7528\u652f\u6301\u3002\u73b0\u5728\u53ef\u4ee5\u8c03\u7528 <\/span><span data-contrast=\"none\">dotnet new console &#8211;aot<\/span><span data-contrast=\"auto\"> \u6765\u521b\u5efa\u4e3a AOT \u7f16\u8bd1\u914d\u7f6e\u7684\u9879\u76ee\u3002\u901a\u8fc7 <\/span><span data-contrast=\"none\">&#8211;aot<\/span><span data-contrast=\"auto\"> \u6dfb\u52a0\u7684\u9879\u76ee\u914d\u7f6e\u6709\u4e09\u4e2a\u6548\u679c\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"37\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u4f7f\u7528 <\/span><span data-contrast=\"none\">dotnet publish<\/span><span data-contrast=\"auto\"> \u6216 Visual Studio \u53d1\u5e03\u9879\u76ee\u65f6\uff0c\u5c06\u751f\u6210\u5177\u6709\u672c\u5730 AOT \u7684\u672c\u5730\u81ea\u5305\u542b\u53ef\u6267\u884c\u6587\u4ef6\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"38\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u542f\u7528\u9488\u5bf9\u4fee\u526a\u3001AOT \u548c\u5355\u6587\u4ef6\u7684\u57fa\u4e8e Roslyn \u7684\u517c\u5bb9\u6027\u5206\u6790\u5668\uff0c\u8fd9\u4e9b\u5206\u6790\u5668\u5c06\u5728\u60a8\u9009\u62e9\u7684\u7f16\u8f91\u5668\u4e2d\u6807\u8bb0\u9879\u76ee\u4e2d\u53ef\u80fd\u5b58\u5728\u95ee\u9898\u7684\u90e8\u5206\uff08\u5982\u679c\u6709\u7684\u8bdd\uff09\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"39\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u5728\u6ca1\u6709 AOT \u7f16\u8bd1\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u8c03\u8bd5\u65f6\uff0c\u542f\u7528 AOT \u7684\u8c03\u8bd5\u65f6\u6a21\u62df\u529f\u80fd\uff0c\u4ee5\u4fbf\u83b7\u5f97\u4e0e AOT \u7c7b\u4f3c\u7684\u4f53\u9a8c\u3002\u8fd9\u6837\u53ef\u4ee5\u786e\u4fdd\u4f8b\u5982\u5728\u672a\u9488\u5bf9 AOT \u6ce8\u91ca\u7684 NuGet \u5305\u4e2d\u4f7f\u7528 Reflection.Emit\uff08\u56e0\u6b64\u88ab\u517c\u5bb9\u6027\u5206\u6790\u5668\u5ffd\u7565\uff09\u5728\u60a8\u9996\u6b21\u5c1d\u8bd5\u4f7f\u7528 AOT \u53d1\u5e03\u9879\u76ee\u65f6\u4e0d\u4f1a\u8ba9\u60a8\u5927\u5403\u4e00\u60ca\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u6211\u4eec\u8fd8\u7ee7\u7eed\u6539\u8fdb\u4f7f\u7528 Native AOT \u7684\u57fa\u672c\u6027\u80fd\uff0c\u5982\u8fd0\u884c\u65f6\u541e\u5410\u91cf\u3001\u5185\u5b58\u4f7f\u7528\u548c\u78c1\u76d8\u4e0a\u7684\u5927\u5c0f\u3002\u5728 Preview 4 \u4e2d\uff0c\u6211\u4eec\u6dfb\u52a0\u4e86\u4e00\u79cd\u8868\u8fbe<\/span><a href=\"https:\/\/learn.microsoft.com\/dotnet\/core\/deploying\/native-aot\/optimizing\"><span data-contrast=\"none\">\u4f18\u5316\u504f\u597d<\/span><\/a><span data-contrast=\"auto\">\u7684\u65b9\u5f0f\uff0c\u4f8b\u5982\u901f\u5ea6\u6216\u5927\u5c0f\u3002\u9ed8\u8ba4\u8bbe\u7f6e\u5c1d\u8bd5\u5728\u8fd9\u4e24\u8005\u4e4b\u95f4\u53d6\u5f97\u5e73\u8861\uff0c\u4f46\u73b0\u5728\u6211\u4eec\u4e5f\u5f15\u5165\u4e86\u4e00\u79cd\u65b9\u6cd5\u6765\u6307\u5b9a\u5982\u4f55\u6743\u8861\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u4f8b\u5982\uff0c\u5728 x64 Windows \u4e0a\u9488\u5bf9 <\/span><span data-contrast=\"none\">dotnet new console &#8211;aot<\/span><span data-contrast=\"auto\"> \u7684\u7ed3\u679c\u8fdb\u884c\u5927\u5c0f\u4f18\u5316\uff0c\u5728 Preview 4 \u4e2d\u53ef\u4ee5\u5b9e\u73b0\u4ee5\u4e0b\u8282\u7701\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<table data-tablestyle=\"MsoNormalTable\" data-tablelook=\"0\" aria-rowcount=\"2\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"0\"><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Default<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Optimize for Size<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"2\">\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Hello World<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">1.20 MB<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">1.07 MB<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">\u4ee5\u4e0a\u662f\u4e00\u4e2a\u5b8c\u5168\u81ea\u5305\u542b\u7684\u5e94\u7528\u7a0b\u5e8f\u7684\u5927\u5c0f\uff0c\u8be5\u5e94\u7528\u7a0b\u5e8f\u5305\u62ec\u8fd0\u884c\u65f6\uff08\u5305\u62ec GC\uff09\u548c\u6240\u6709\u5fc5\u8981\u7684\u7c7b\u5e93\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 Preview 4\u4e2d\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u5bf9\u901f\u5ea6\u8fdb\u884c\u4f18\u5316\u53ef\u4ee5\u4f7f\u771f\u5b9e\u5de5\u4f5c\u8d1f\u8f7d\u7684\u541e\u5410\u91cf\u63d0\u9ad82-3%\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Linux \u53d1\u884c\u7248\u7248\u672c\u652f\u6301<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6211\u4eec<\/span><a href=\"https:\/\/github.com\/dotnet\/core\/issues\/8133#issuecomment-1432611595\"><span data-contrast=\"none\">\u4e4b\u524d\u5ba3\u5e03<\/span><\/a><span data-contrast=\"auto\">\u5c06\u66f4\u65b0 <\/span><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/main\/release-notes\/8.0\/supported-os.md#linux\"><span data-contrast=\"none\">.NET 8 \u652f\u6301\u7684 Linux \u53d1\u884c\u7248\u7248\u672c<\/span><\/a><span data-contrast=\"auto\">\u3002\u8fd9\u4e9b\u66f4\u6539\u5305\u542b\u5728 Preview 4 \u4e2d\uff0c\u7279\u522b\u662f .NET 8 \u9488\u5bf9\u7684 <\/span><span data-contrast=\"none\">glibc<\/span><span data-contrast=\"auto\"> \u7248\u672c\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">.NET 8 \u662f<\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/83428\"><span data-contrast=\"none\">\u9488\u5bf9 Ubuntu 16.04 \u6784\u5efa\u7684<\/span><\/a><span data-contrast=\"auto\">\uff0c\u9002\u7528\u4e8e\u6240\u6709\u4f53\u7cfb\u7ed3\u6784\u3002\u8fd9\u5bf9\u4e8e\u5b9a\u4e49 .NET 8 \u7684\u6700\u4f4e <\/span><span data-contrast=\"none\">glibc <\/span><span data-contrast=\"auto\">\u7248\u672c\u975e\u5e38\u91cd\u8981\u3002.NET 8 \u65e0\u6cd5\u5728\u5305\u542b\u8f83\u65e7\u7684 <\/span><span data-contrast=\"none\">glibc<\/span> <span data-contrast=\"auto\">\u53d1\u884c\u7248\u7248\u672c\uff08\u4f8b\u5982 Ubuntu 14.04 \u6216 Red Hat Enterprise Linux 7\uff09\u4e0a\u542f\u52a8\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6211\u4eec\u4e5f\u5728\u66f4\u65b0 .NET 8 Linux \u4ee5\u4f7f\u7528 <\/span><a href=\"https:\/\/www.phoronix.com\/news\/LLVM-16.0-Released\"><span data-contrast=\"none\">clang 16<\/span><\/a><span data-contrast=\"auto\">\u3002\u6211\u4eec\u9884\u8ba1\u8fd9\u4e00\u53d8\u66f4\u5c06\u5305\u542b\u5728 Preview 5 \u4e2d\u3002\u6211\u4eec\u4e0d\u4f1a\u4e3a\u8fd9\u4e2a\u53d8\u66f4\u53e6\u5916\u53d1\u5e03\u516c\u544a\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6ca1\u6709\u5176\u4ed6\u91cd\u5927\u53d8\u5316\u3002\u6211\u4eec\u5c06\u7ee7\u7eed\u5728 Arm32\u3001Arm64 \u548c x64 \u67b6\u6784\u4e0a\u652f\u6301 Linux \u4e0a\u7684 .NET\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">System.Text.Json\uff1a\u586b\u5145\u53ea\u8bfb\u6210\u5458<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u4ece .NET 8 Preview 4 \u5f00\u59cb\uff0cSystem.Text.Json \u5f15\u5165\u4e86\u53cd\u5e8f\u5217\u5316\u5230\u53ea\u8bfb\u5c5e\u6027\u6216\u5b57\u6bb5\u7684\u80fd\u529b\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6211\u4eec\u8fd8\u5f15\u5165\u4e86\u4e00\u4e2a\u9009\u9879\uff0c\u5141\u8bb8\u5f00\u53d1\u8005\u4e3a\u6240\u6709\u53ef\u586b\u5145\u7684\u5c5e\u6027\u542f\u7528\u5b83 &#8211; \u4f8b\u5982\u81ea\u5b9a\u4e49\u8f6c\u6362\u5668\u53ef\u80fd\u4e0e\u6b64\u529f\u80fd\u4e0d\u517c\u5bb9\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">JsonSerializerOptions options = new()\u00a0\r\n{\u00a0\r\n\u00a0 PreferredObjectCreationHandling = JsonObjectCreationHandling.Populate\u00a0\r\n}; <\/code><\/pre>\n<p><span data-contrast=\"auto\">\u5bf9\u4e8e\u73b0\u6709\u5e0c\u671b\u4f7f\u7528\u6b64\u529f\u80fd\u4f46\u62c5\u5fc3\u517c\u5bb9\u6027\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u53ef\u4ee5\u901a\u8fc7\u5728\u8981\u586b\u5145\u7684\u5c5e\u6027\u7c7b\u578b\u4e0a\u653e\u7f6e <\/span><span data-contrast=\"none\">[JsonObjectCreationHandling(JsonObjectCreationHandling.Populate)]<\/span><span data-contrast=\"auto\"> \u5c5e\u6027\u6765\u9010\u4e2a\u542f\u7528\u8be5\u529f\u80fd\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u4f8b\u5982\uff0c\u8981\u5bf9\u4e00\u4e2a\u7279\u5b9a\u7c7b\u7684\u6240\u6709\u5c5e\u6027\u542f\u7528\u586b\u5145\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">using System.Text.Json;\u00a0\r\nusing System.Text.Json.Serialization;\u00a0\r\n\r\nJsonSerializerOptions options = new()\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 WriteIndented = true,\u00a0\r\n\u00a0\u00a0\u00a0 \/\/ Instead of granular control we could also enable this globally like this:\u00a0\r\n\u00a0\u00a0\u00a0 \/\/ PreferredObjectCreationHandling = JsonObjectCreationHandling.Populate\u00a0\r\n};\u00a0\r\n\u00a0\r\nCustomerInfo customer = JsonSerializer.Deserialize&lt;CustomerInfo&gt;(\"\"\"{\"Person\":{\"Name\":\"John\"},\"Company\":{\"Name\":\"John and Son\"}}\"\"\", options)!;\u00a0\r\n\u00a0\r\nConsole.WriteLine(JsonSerializer.Serialize(customer, options));\u00a0\r\n\u00a0\r\nclass PersonInfo\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 \/\/ there is nothing here to be populated since string cannot be re-used\u00a0\r\n\u00a0\u00a0\u00a0 public required string Name { get; set; }\u00a0\r\n\u00a0\u00a0\u00a0 public string? Title { get; set; }\u00a0\r\n}\u00a0\r\n\u00a0\r\nclass CompanyInfo\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 public required string Name { get; set; }\u00a0\r\n\u00a0\u00a0\u00a0 public string? Address { get; set; }\u00a0\r\n\u00a0\u00a0\u00a0 public string? PhoneNumber { get; set; }\u00a0\r\n\u00a0\u00a0\u00a0 public string? Email { get; set; }\u00a0\r\n}\u00a0\r\n\u00a0\r\n\/\/ notes:\u00a0\r\n\/\/ - attribute does not apply to the `CustomerInfo` class itself: i.e. properties of type `CustomerInfo` wouldn't be auto-populated\u00a0\r\n\/\/\u00a0\u00a0\u00a0\u00a0 - automatic rules like these can be implemented with contract customization\u00a0\r\n\/\/ - attribute do apply to `Person` and `Company` properties\u00a0\r\n\/\/ - attribute can also be placed on individual properties\u00a0\r\n[JsonObjectCreationHandling(JsonObjectCreationHandling.Populate)]\u00a0\r\nclass CustomerInfo\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 private const string NA = \"N\/A\";\u00a0\r\n\u00a0\r\n\u00a0\u00a0\u00a0 \/\/ note how neither of these have setters\u00a0\r\n\u00a0\u00a0\u00a0 public PersonInfo Person { get; } = new PersonInfo() { Name = \"Anonymous\", Title = \"Software Developer\" };\u00a0\r\n\u00a0\u00a0\u00a0 public CompanyInfo Company { get; } = new CompanyInfo() { Name = NA, Address = NA, PhoneNumber = NA, Email = NA };\u00a0\r\n} <\/code><\/pre>\n<p><span data-contrast=\"auto\">\u00a0\u4e0a\u8ff0\u8f93\u51fa\u4e0e\u901a\u8fc7\u5168\u5c40\u9009\u9879\u5b9e\u73b0\u7684\u8f93\u51fa\u76f8\u540c\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">{\u00a0\r\n\u00a0 \"Person\": {\u00a0\r\n\u00a0\u00a0\u00a0 \"Name\": \"John\",\u00a0\r\n\u00a0\u00a0\u00a0 \"Title\": \"Software Developer\"\u00a0\r\n\u00a0 },\u00a0\r\n\u00a0 \"Company\": {\u00a0\r\n\u00a0\u00a0\u00a0 \"Name\": \"John and Son\",\u00a0\r\n\u00a0\u00a0\u00a0 \"Address\": \"N\/A\",\u00a0\r\n\u00a0\u00a0\u00a0 \"PhoneNumber\": \"N\/A\",\u00a0\r\n\u00a0\u00a0\u00a0 \"Email\": \"N\/A\"\u00a0\r\n\u00a0 }\u00a0\r\n} <\/code><\/pre>\n<p><span data-contrast=\"auto\">\u4e4b\u524d\uff0c\u4e3a\u4f5c\u6bd4\u8f83\uff0c\u6211\u4eec\u4f1a\u770b\u5230\u6211\u4eec\u7684\u8f93\u5165\uff0c\u4f46\u7531\u4e8e\u6ca1\u6709\u53ef\u8bbe\u7f6e\u7684\u5c5e\u6027 <\/span><span data-contrast=\"none\">Person<\/span><span data-contrast=\"auto\"> \u6216 <\/span><span data-contrast=\"none\">Company <\/span><span data-contrast=\"none\">\u6765<\/span><span data-contrast=\"auto\">\u53cd\u5e8f\u5217\u5316\uff0c\u6211\u4eec\u4f1a\u5b8c\u5168\u5ffd\u7565\u8f93\u5165\uff0c\u5e76\u4e14\u8f93\u51fa\u53ea\u663e\u793a\u9ed8\u8ba4\u503c\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">{\u00a0\r\n\u00a0 \"Person\": {\u00a0\r\n\u00a0\u00a0\u00a0 \"Name\": \"Anonymous\",\u00a0\r\n\u00a0\u00a0\u00a0 \"Title\": \"Software Developer\"\u00a0\r\n\u00a0 },\u00a0\r\n\u00a0 \"Company\": {\u00a0\r\n\u00a0\u00a0\u00a0 \"Name\": \"N\/A\",\u00a0\r\n\u00a0\u00a0\u00a0 \"Address\": \"N\/A\",\u00a0\r\n\u00a0\u00a0\u00a0 \"PhoneNumber\": \"N\/A\",\u00a0\r\n\u00a0\u00a0\u00a0 \"Email\": \"N\/A\"\u00a0\r\n\u00a0 }\u00a0\r\n} <\/code><\/pre>\n<p><b><span data-contrast=\"auto\">\u586b\u5145\u53ea\u8bfb\u6210\u5458\u7684\u5176\u4ed6\u6ce8\u610f\u4e8b\u9879<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"40\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u9605\u8bbe\u8ba1\u7684\u539f\u59cb issue\uff1a<\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/78556\"><span data-contrast=\"none\">https:\/\/github.com\/dotnet\/runtime\/issues\/78556<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"41\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u7ed3\u6784\u4f53\u4e5f\u53ef\u4ee5\u8fdb\u884c\u586b\u5145\uff0c\u4f46\u586b\u5145\u8fc7\u7a0b\u662f\u5148\u521b\u5efa\u4e00\u4e2a\u526f\u672c\uff0c\u7136\u540e\u5c06\u5176\u8bbe\u7f6e\u56de\u5c5e\u6027\uff0c\u56e0\u6b64\u8fd9\u4e9b\u5c5e\u6027\u4e5f\u9700\u8981\u8bbe\u7f6e\u5668<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"42\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u96c6\u5408\u7684\u586b\u5145\u4ee5\u7d2f\u52a0\u65b9\u5f0f\u8fdb\u884c &#8211; \u5c06\u73b0\u6709\u96c6\u5408\u53ca\u5176\u6240\u6709\u5185\u5bb9\u89c6\u4e3a\u539f\u59cb\u5bf9\u8c61\uff0c\u56e0\u6b64\u4fdd\u7559\u4e86\u6240\u6709\u73b0\u6709\u5143\u7d20 &#8211; \u6b64\u884c\u4e3a\u53ef\u4ee5\u901a\u8fc7\u5951\u7ea6\u5b9a\u5236\u548c\/\u6216\u53cd\u5e8f\u5217\u5316\u56de\u8c03\u8fdb\u884c\u66f4\u6539<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">System.Text.Json \u6539\u8fdb<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"none\">JsonSerializer.IsReflectionEnabledByDefault<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"43\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/83844\"><span data-contrast=\"none\">https:\/\/github.com\/dotnet\/runtime\/pull\/83844<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"none\">JsonSerializer<\/span><span data-contrast=\"auto\"> \u7c7b\u516c\u5f00\u4e86\u8bb8\u591a\u53ef\u63a5\u53d7\u53ef\u9009\u53c2\u6570 <\/span><span data-contrast=\"none\">JsonSerializerOptions<\/span><span data-contrast=\"auto\"> \u7684\u5e8f\u5217\u5316\u548c\u53cd\u5e8f\u5217\u5316\u65b9\u6cd5\u3002\u5982\u679c\u672a\u6307\u5b9a\uff0c\u5219\u8fd9\u4e9b\u65b9\u6cd5\u9ed8\u8ba4\u4f7f\u7528\u57fa\u4e8e\u53cd\u5c04\u7684\u5e8f\u5217\u5316\u5668\u3002\u5728\u7ecf\u8fc7\u88c1\u526a\/Native AOT \u5e94\u7528\u7a0b\u5e8f\u7684\u4e0a\u4e0b\u6587\u4e2d\uff0c\u8fd9\u4e2a\u9ed8\u8ba4\u503c\u53ef\u80fd\u4f1a\u5bf9\u5e94\u7528\u7a0b\u5e8f\u5927\u5c0f\u4ea7\u751f\u5f71\u54cd\uff1a\u5373\u4f7f\u7528\u6237\u5c0f\u5fc3\u5730\u4f20\u9012\u4e00\u4e2a\u6e90\u751f\u6210\u7684\u503c\uff0c\u5b83\u4ecd\u7136\u4f1a\u5bfc\u81f4\u4fee\u526a\u5668\u6839\u636e\u53cd\u5c04\u7ec4\u4ef6\u8fdb\u884c\u64cd\u4f5c\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">System.Text.Json \u73b0\u5728\u9644\u5e26\u4e86\u7528\u4e8e\u63a7\u5236 <\/span><span data-contrast=\"none\">JsonSerializer<\/span> <span data-contrast=\"auto\">\u65b9\u6cd5\u9ed8\u8ba4\u884c\u4e3a\u7684\u529f\u80fd\u5f00\u5173 <\/span><span data-contrast=\"none\">System.Text.Json.JsonSerializer.IsReflectionEnabledByDefault<\/span><span data-contrast=\"auto\">\u3002\u5728\u53d1\u5e03\u65f6\u5c06\u8be5\u5f00\u5173\u8bbe\u7f6e\u4e3a <\/span><span data-contrast=\"none\">false<\/span><span data-contrast=\"auto\"> \u73b0\u5728\u53ef\u4ee5\u907f\u514d\u610f\u5916\u5730\u56fa\u5b9a\u53cd\u5c04\u7ec4\u4ef6\u3002\u5e94\u8be5\u6ce8\u610f\u7684\u662f\uff0c\u7981\u7528\u8be5\u5f00\u5173\u540e\uff0c\u8fd9\u6bb5\u4ee3\u7801<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">JsonSerializer.Serialize(new { Value = 42 });<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u4f1a\u56e0 <\/span><span data-contrast=\"none\">NotSupportedException<\/span><span data-contrast=\"auto\"> \u5f02\u5e38\u800c\u5931\u8d25\u3002\u9700\u8981\u663e\u5f0f\u4f20\u9012\u5df2\u914d\u7f6e\u7684 <\/span><span data-contrast=\"none\">JsonSerializerOptions<\/span><span data-contrast=\"auto\"> \u624d\u80fd\u4f7f\u65b9\u6cd5\u6b63\u5e38\u5de5\u4f5c\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6b64\u5916\uff0c\u529f\u80fd\u5f00\u5173\u7684\u503c\u53cd\u6620\u5728 <\/span><span data-contrast=\"none\">JsonSerializer.IsReflectionEnabledByDefault<\/span><span data-contrast=\"auto\"> \u5c5e\u6027\u4e2d\uff0c\u8be5\u5c5e\u6027\u88ab\u89c6\u4e3a\u94fe\u63a5\u65f6\u5e38\u91cf\u3002\u57fa\u4e8e System.Text.Json \u6784\u5efa\u7684\u5e93\u4f5c\u8005\u53ef\u4ee5\u4f9d\u8d56\u8be5\u5c5e\u6027\u6765\u914d\u7f6e\u5176\u9ed8\u8ba4\u503c\uff0c\u540c\u65f6\u4e0d\u4f1a\u610f\u5916\u5730\u56fa\u5b9a\u53cd\u5c04\u7ec4\u4ef6\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">static JsonSerializerOptions GetDefaultOptions()\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 if (JsonSerializer.IsReflectionEnabledByDefault)\u00a0\r\n\u00a0\u00a0\u00a0 {\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ This branch has a dependency on DefaultJsonTypeInfo\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ but will get trimmed away by the linker if the feature switch is disabled.\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return new JsonSerializerOptions\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 TypeInfoResolver = new DefaultJsonTypeInfoResolver(),\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PropertyNamingPolicy = JsonNamingPolicy.KebabCase,\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\u00a0\u00a0\u00a0 return new() { PropertyNamingPolicy = JsonNamingPolicy.KebabCaseLower } ;\u00a0\r\n} <\/code><\/pre>\n<p><b><span data-contrast=\"none\">JsonSerializerOptions.TypeInfoResolverChain<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:260,&quot;335559739&quot;:260,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"44\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/83095\"><span data-contrast=\"none\">https:\/\/github.com\/dotnet\/runtime\/issues\/83095<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u5728 .NET 7 \u4e2d\u53d1\u5e03\u65f6\uff0c\u5951\u7ea6\u5b9a\u5236\u529f\u80fd\u901a\u8fc7 <\/span><span data-contrast=\"none\">JsonTypeInfoResolver.Combine<\/span><span data-contrast=\"auto\"> \u65b9\u6cd5\u6dfb\u52a0\u4e86\u5bf9\u94fe\u63a5\u6e90\u751f\u6210\u5668\u7684\u652f\u6301\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">var options = new JsonSerializerOptions\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 TypeInfoResolver = JsonTypeInfoResolver.Combine(ContextA.Default, ContextB.Default, ContextC.Default);\u00a0\r\n}; <\/code><\/pre>\n<p><span data-contrast=\"auto\">\u6839\u636e\u6211\u4eec\u6536\u5230\u7684\u53cd\u9988\uff0c\u8fd9\u79cd\u65b9\u6cd5\u5b58\u5728\u4e00\u4e9b\u53ef\u7528\u6027\u95ee\u9898\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ol>\n<li data-leveltext=\"%1.\" data-font=\"Microsoft Yahei\" data-listid=\"45\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u5b83\u9700\u8981\u5728\u4e00\u4e2a\u8c03\u7528\u7ad9\u70b9\u6307\u5b9a\u6240\u6709\u94fe\u5f0f\u7ec4\u4ef6 \u2014\u2014 \u4e8b\u5b9e\u4e0a\uff0c\u89e3\u6790\u5668\u65e0\u6cd5\u5728\u94fe\u4e4b\u524d\u6216\u4e4b\u540e\u6dfb\u52a0\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ol>\n<ol>\n<li data-leveltext=\"%1.\" data-font=\"Microsoft Yahei\" data-listid=\"45\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559684&quot;:-1,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u56e0\u4e3a\u94fe\u5f0f\u5b9e\u73b0\u662f\u62bd\u8c61\u5728 <\/span><span data-contrast=\"none\">IJsonTypeInfoResolver<\/span><span data-contrast=\"auto\"> \u5b9e\u73b0\u540e\u9762\u7684\uff0c\u7528\u6237\u65e0\u6cd5\u68c0\u67e5\u94fe\u6216\u4ece\u4e2d\u79fb\u9664\u7ec4\u4ef6\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ol>\n<p><span data-contrast=\"none\">JsonSerializerOptions<\/span><span data-contrast=\"auto\"> \u7c7b\u73b0\u5728\u5305\u62ec\u4e00\u4e2a\u4e0e <\/span><span data-contrast=\"none\">TypeInfoResolver<\/span><span data-contrast=\"auto\"> \u76f8\u8f85\u76f8\u6210\u7684\u5c5e\u6027\uff1a<\/span><span data-contrast=\"none\">TypeInfoResolverChain<\/span><span data-contrast=\"none\">\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">namespace System.Text.Json;\u00a0\r\n\u00a0\r\npublic partial class JsonSerializerOptions\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 public IJsonTypeInfoResolver? TypeInfoResolver { get; set; }\u00a0\r\n\u00a0\u00a0\u00a0 public IList&lt;IJsonTypeInfoResolver&gt; TypeInfoResolverChain { get; }\u00a0\r\n} <\/code><\/pre>\n<p><span data-contrast=\"auto\">\u73b0\u5728\u53ef\u4ee5\u6309\u5982\u4e0b\u65b9\u5f0f\u64cd\u4f5c\u539f\u59cb\u793a\u4f8b\u4e2d\u5b9a\u4e49\u7684\u9009\u9879\u5b9e\u4f8b\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">options.TypeInfoResolverChain.Count; \/\/ 3\u00a0\r\noptions.TypeInfoResolverChain.RemoveAt(0);\u00a0\r\noptions.TypeInfoResolverChain.Count; \/\/ 2 <\/code><\/pre>\n<p><span data-contrast=\"auto\">\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c<\/span><span data-contrast=\"none\">TypeInfoResolver<\/span><span data-contrast=\"auto\"> \u548c <\/span><span data-contrast=\"none\">TypeInfoResolverChain<\/span> <span data-contrast=\"auto\">\u5c5e\u6027\u59cb\u7ec8\u4fdd\u6301\u540c\u6b65\uff0c\u56e0\u6b64\u5bf9\u4e00\u4e2a\u5c5e\u6027\u7684\u66f4\u6539\u5c06\u5f3a\u5236\u5bf9\u53e6\u4e00\u4e2a\u5c5e\u6027\u8fdb\u884c\u66f4\u65b0\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u5f03\u7528\u7684\u202f<\/span><\/b><b><span data-contrast=\"none\">JsonSerializerOptions.AddContext<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:260,&quot;335559739&quot;:260,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"46\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/83280\"><span data-contrast=\"none\">https:\/\/github.com\/dotnet\/runtime\/issues\/83280<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/learn.microsoft.com\/dotnet\/api\/system.text.json.jsonserializeroptions.addcontext?view=net-8.0\"><span data-contrast=\"none\">JsonSerializerOptions.AddContext<\/span><\/a><span data-contrast=\"auto\"> \u5df2\u88ab <\/span><span data-contrast=\"none\">TypeInfoResolver<\/span><span data-contrast=\"auto\"> \u548c <\/span><span data-contrast=\"none\">TypeInfoResolverChain<\/span><span data-contrast=\"auto\"> \u5c5e\u6027\u53d6\u4ee3\uff0c\u56e0\u6b64\u5b83\u73b0\u5728\u88ab\u6807\u8bb0\u4e3a\u5e9f\u5f03\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u65e0\u6cd5\u5f62\u5bb9\u7684\u7c7b\u578b\u652f\u6301<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"47\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/82457\"><span data-contrast=\"none\">https:\/\/github.com\/dotnet\/runtime\/issues\/82457<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">\u7f16\u8bd1\u5668\u751f\u6210\u6216\u201c\u65e0\u6cd5\u5f62\u5bb9\u201d\u7684\u7c7b\u578b\u5728\u5f31\u7c7b\u578b\u7684\u6e90\u4ee3\u7801 gen scenaria \u4e2d\u5f88\u96be\u5f97\u5230\u652f\u6301\u3002\u5728 .NET 7 \u4e2d\uff0c\u4ee5\u4e0b\u5e94\u7528<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">object value = Test();\u00a0\r\nJsonSerializer.Serialize(value, MyContext.Default.Options);\u00a0\r\n\u00a0\r\nasync IAsyncEnumerable&lt;int&gt; Test()\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0 for (int i = 0; i &lt; 10; i++)\u00a0\r\n\u00a0\u00a0\u00a0 {\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 await Task.Delay(1000);\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 yield return i;\u00a0\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n}\r\n[JsonSerializable(typeof(IAsyncEnumerable&lt;int&gt;))]\u00a0\r\ninternal partial class MyContext : JsonSerializerContext {}<\/code><\/pre>\n<p><span data-contrast=\"auto\">\u5c06\u8fd0\u884c\u5931\u8d25\u5e76\u62a5\u9519<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">Metadata for type 'Program+&lt;&lt;&lt;Main&gt;$&gt;g__Test|0_5&gt;d' was not provided by TypeInfoResolver of type 'MyContext'\u00a0<\/code><\/pre>\n<p><span data-contrast=\"auto\">\u8fd9\u662f\u56e0\u4e3a\u7f16\u8bd1\u5668\u751f\u6210\u7684\u7c7b\u578b <\/span><span data-contrast=\"none\">Program+&lt;&lt;Main&gt;$&gt;g_Test|0_5&gt;d<\/span><span data-contrast=\"auto\"> \u4e0d\u80fd\u7531\u6e90\u751f\u6210\u5668\u663e\u5f0f\u6307\u5b9a\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u4ece Preview 4 \u5f00\u59cb\uff0cSystem.Text.Json \u5c06\u6267\u884c\u8fd0\u884c\u65f6\u6700\u8fd1\u7956\u5148\u89e3\u6790\uff0c\u4ee5\u786e\u5b9a\u7528\u4e8e\u5e8f\u5217\u5316\u503c\u7684\u6700\u5408\u9002\u7684\u8d85\u7c7b\u578b\uff08\u5728\u672c\u4f8b\u4e2d\uff0c\u662f IAsyncEnumerable\uff1cint\uff1e\uff09\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"none\">JsonSerializerOptions.TryGetTypeInfo<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:260,&quot;335559739&quot;:260,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"48\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/84411\"><span data-contrast=\"none\">https:\/\/github.com\/dotnet\/runtime\/pull\/84411<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Preview 4 \u73b0\u5728\u5305\u62ec <\/span><a href=\"https:\/\/learn.microsoft.com\/dotnet\/api\/system.text.json.jsonserializeroptions.gettypeinfo?view=net-8.0\"><span data-contrast=\"none\">GetTypeInfo<\/span><\/a><span data-contrast=\"auto\"> \u65b9\u6cd5\u7684 <\/span><span data-contrast=\"none\">Try-<\/span><span data-contrast=\"auto\"> \u53d8\u4f53\uff0c\u5982\u679c\u627e\u4e0d\u5230\u6307\u5b9a\u7c7b\u578b\u7684\u5143\u6570\u636e\uff0c\u8be5\u65b9\u6cd5\u5c06\u8fd4\u56de false\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Codegen<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:260,&quot;335559739&quot;:260,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u8fde\u7eed\u5bc4\u5b58\u5668\u5206\u914d<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:260,&quot;335559739&quot;:260,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728\u6b64\u9884\u89c8\u7248\u672c\u4e2d\uff0c\u6211\u4eec\u5728\u6211\u4eec\u7684\u5bc4\u5b58\u5668\u5206\u914d\u5668\u4e2d\u5f15\u5165\u4e86\u4e00\u79cd\u540d\u4e3a\u201c\u8fde\u7eed\u5bc4\u5b58\u5668\u201d\u5206\u914d\u7684\u65b0\u529f\u80fd\u3002\u5728\u6df1\u5165\u4e86\u89e3\u5b83\u5305\u542b\u4ec0\u4e48\u4ee5\u53ca\u4e3a\u4ec0\u4e48\u6709\u5fc5\u8981\u4e4b\u524d\uff0c\u8ba9\u6211\u4eec\u9996\u5148\u56de\u987e\u4e00\u4e0b\u4ec0\u4e48\u662f\u5bc4\u5b58\u5668\u5206\u914d\u4ee5\u53ca\u5b83\u5728 RyuJIT \u4e2d\u662f\u5982\u4f55\u5de5\u4f5c\u7684\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">RyuJIT \u4e2d\u4f7f\u7528\u7684\u5bc4\u5b58\u5668\u5206\u914d\u7b97\u6cd5\u57fa\u4e8e\u201c\u7ebf\u6027\u626b\u63cf\u201d\u65b9\u6cd5\u3002\u5b83\u626b\u63cf\u7a0b\u5e8f\u4ee5\u8bc6\u522b\u6240\u6709\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\uff0c\u8fd9\u4e9b\u53d8\u91cf\u5728\u6587\u732e\u4e2d\u88ab\u79f0\u4e3a\u201c\u95f4\u9694\u201d\uff0c\u5e76\u4e14\u5728\u6bcf\u6b21\u4f7f\u7528\u65f6\u4e3a\u6bcf\u4e2a\u53d8\u91cf\u5206\u914d\u4e00\u4e2a\u5bc4\u5b58\u5668\u3002\u4e3a\u4e86\u786e\u5b9a\u5728\u7ed9\u5b9a\u70b9\u5206\u914d\u6700\u4f73\u5bc4\u5b58\u5668\uff0c\u8be5\u7b97\u6cd5\u9700\u8981\u8bc6\u522b\u5728\u8be5\u70b9\u6d3b\u52a8\u7684\u53d8\u91cf\uff0c\u5e76\u4e14\u4e0d\u4e0e\u5176\u4ed6\u53d8\u91cf\u91cd\u53e0\u3002\u7136\u540e\uff0c\u5b83\u4ece\u4e00\u7ec4\u53ef\u7528\u7684\u7a7a\u95f2\u5bc4\u5b58\u5668\u4e2d\u9009\u62e9\u4e00\u4e2a\u5bc4\u5b58\u5668\uff0c\u5728\u5206\u914d\u70b9\u4f7f\u7528\u542f\u53d1\u5f0f\u65b9\u6cd5\u6765\u786e\u5b9a\u6700\u4f73\u5bc4\u5b58\u5668\u96c6\u3002\u5982\u679c\u6ca1\u6709\u5bc4\u5b58\u5668\u53ef\u7528\uff0c\u56e0\u4e3a\u5b83\u4eec\u90fd\u5206\u914d\u7ed9\u4e86\u95f4\u9694\uff0c\u90a3\u4e48\u7b97\u6cd5\u4f1a\u8bc6\u522b\u53ef\u4ee5\u5728\u8be5\u4f4d\u7f6e\u201c\u6ea2\u51fa\u201d\u5e76\u5206\u914d\u7684\u6700\u4f73\u5bc4\u5b58\u5668\u3002\u6ea2\u51fa\u6d89\u53ca\u5c06\u5bc4\u5b58\u5668\u7684\u503c\u5b58\u50a8\u5728\u5806\u6808\u4e0a\uff0c\u7a0d\u540e\u5728\u9700\u8981\u65f6\u68c0\u7d22\u5b83\uff0c\u8fd9\u662f\u5bc4\u5b58\u5668\u5206\u914d\u5668\u8bd5\u56fe\u6700\u5c0f\u5316\u7684\u6602\u8d35\u64cd\u4f5c\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Arm64 \u6709\u4e24\u4e2a\u6307\u4ee4\uff0c<\/span><a href=\"https:\/\/developer.arm.com\/documentation\/dui0801\/g\/A64-SIMD-Vector-Instructions\/TBL--vector-\"><span data-contrast=\"none\">TBL<\/span><\/a><span data-contrast=\"auto\"> \u548c <\/span><a href=\"https:\/\/developer.arm.com\/documentation\/dui0801\/g\/A64-SIMD-Vector-Instructions\/TBX--vector-\"><span data-contrast=\"none\">TBX<\/span><\/a><span data-contrast=\"auto\">\uff0c\u5b83\u4eec\u7528\u4e8e\u8868\u5411\u91cf\u67e5\u627e\u3002\u8fd9\u4e9b\u6307\u4ee4\u5c06\u201c\u5143\u7ec4\u201d\u4f5c\u4e3a\u5176\u64cd\u4f5c\u6570\u4e4b\u4e00\uff0c\u8be5\u64cd\u4f5c\u6570\u53ef\u4ee5\u5305\u542b2\u30013\u62164\u4e2a\u5b9e\u4f53\u3002\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/80297\"><span data-contrast=\"none\">PR\uff0380297<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c\u6211\u4eec\u5728 AdvSimd \u547d\u540d\u7a7a\u95f4\u4e0b\u4e3a\u8fd9\u4e9b\u6307\u4ee4\u6dfb\u52a0\u4e86\u4e24\u7ec4 API\uff0c\u5206\u522b\u4e3a VectorTableLookup \u548c <\/span><span data-contrast=\"auto\">VectorTableLookupExtension\u3002\u7136\u800c\uff0c\u8fd9\u4e9b\u6307\u4ee4\u8981\u6c42\u5143\u7ec4\u4e2d\u7684\u6240\u6709\u5b9e\u4f53\u90fd\u5b58\u5728\u4e8e\u8fde\u7eed\u7684\u5bc4\u5b58\u5668\u4e2d\u3002\u4e3a\u4e86\u66f4\u597d\u5730\u7406\u89e3\u8fd9\u4e2a\u8981\u6c42\uff0c\u8ba9\u6211\u4eec\u770b\u4e00\u4e2a\u4f8b\u5b50\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">public static Vector128&lt;byte&gt; Test(float f)\u00a0\r\n{\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var a = Produce1();\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var b = Produce2();\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var c = a + b;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var d = c + a;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var e = d + b;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 d = AdvSimd.Arm64.VectorTableLookup((d, e, e, b), c);\u00a0\u00a0\r\n} <\/code><\/pre>\n<p><span data-contrast=\"auto\">\u8fd9\u662f\u4e3a\u8be5\u65b9\u6cd5\u751f\u6210\u7684\u4ee3\u7801\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">movz\u00a0\u00a0\u00a0 x0, #0xD1FFAB1E\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ code for helloworld:Produce1():System.Runtime.Intrinsics.Vector128`1[ubyte]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 movk\u00a0\u00a0\u00a0 x0, #0xD1FFAB1E LSL #16\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 movk\u00a0\u00a0\u00a0 x0, #0xD1FFAB1E LSL #32\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ldr\u00a0\u00a0\u00a0\u00a0 x0, [x0]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 blr\u00a0\u00a0\u00a0\u00a0 x0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 str\u00a0\u00a0\u00a0\u00a0 q0, [fp, #0x20] \/\/ [V01 loc0]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 movz\u00a0\u00a0\u00a0 x0, #0xD1FFAB1E\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ code for helloworld:Produce2():System.Runtime.Intrinsics.Vector128`1[ubyte]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 movk\u00a0\u00a0\u00a0 x0, #0xD1FFAB1E LSL #16\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 movk\u00a0\u00a0\u00a0 x0, #0xD1FFAB1E LSL #32\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ldr\u00a0\u00a0\u00a0\u00a0 x0, [x0]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 blr\u00a0\u00a0\u00a0\u00a0 x0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ldr\u00a0\u00a0\u00a0\u00a0 q16, [fp, #0x20]\u00a0\u00a0\u00a0 \/\/ [V01 loc0]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 add\u00a0\u00a0\u00a0\u00a0 v17.16b, v16.16b, v0.16b\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 str\u00a0\u00a0\u00a0\u00a0 q17, [fp, #0x10]\u00a0\u00a0\u00a0 \/\/ [V03 loc2]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 add\u00a0\u00a0\u00a0\u00a0 v16.16b, v17.16b, v16.16b\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 add\u00a0\u00a0\u00a0\u00a0 v18.16b, v16.16b, v0.16b\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 mov\u00a0\u00a0\u00a0\u00a0 v17.16b, v18.16b\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 mov\u00a0\u00a0\u00a0\u00a0 v19.16b, v0.16b\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ldr\u00a0\u00a0\u00a0\u00a0 q20, [fp, #0x10]\u00a0\u00a0\u00a0 \/\/ [V03 loc2]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tbl\u00a0\u00a0\u00a0\u00a0 v16.16b, {v16.16b, v17.16b, v18.16b, v19.16b}, v20.16b\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 add\u00a0\u00a0\u00a0\u00a0 v0.16b, v0.16b, v16.16b <\/code><\/pre>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">\u5728\u7ed9\u5b9a\u7684\u793a\u4f8b\u4e2d\uff0cVectorTableLookup() \u63a5\u53d7\u4e00\u4e2a\u75314\u4e2a\u77e2\u91cf d, e, e \u548c b \u7ec4\u6210\u7684\u5143\u7ec4\uff0c\u5b83\u4eec\u901a\u8fc7\u8fde\u7eed\u7684\u5bc4\u5b58\u5668 v16 \u5230 v19 \u4f20\u9012\u3002\u5c3d\u7ba1\u7b2c2\u4e2a\u548c\u7b2c3\u4e2a\u503c\u90fd\u662f\u76f8\u540c\u7684\u53d8\u91cf e\uff0c\u4f46\u5b83\u4eec\u4ecd\u7136\u5728\u4e0d\u540c\u7684\u5bc4\u5b58\u5668 v17 \u548c v18 \u4e2d\u4f20\u9012\u3002\u8fd9\u5e26\u6765\u4e86\u5bfb\u627e\u4e0d\u4ec5\u662f\u591a\u4e2a\u7a7a\u95f2\uff08\u6216\u5fd9\u788c\uff09\u5bc4\u5b58\u5668\uff082\u30013 \u6216 4 \u4e2a\uff09\u7528\u4e8e tbl \u548c tbx \u6307\u4ee4\uff0c\u800c\u4e14\u662f\u8fde\u7eed\u5bc4\u5b58\u5668\u7684\u590d\u6742\u6027\u3002\u4e3a\u4e86\u5bb9\u7eb3\u8fd9\u4e2a\u65b0\u8981\u6c42\uff0c\u6211\u4eec\u7684\u7b97\u6cd5\u5fc5\u987b\u5728\u5404\u4e2a\u9636\u6bb5\u8fdb\u884c\u66f4\u65b0\uff0c\u4f8b\u5982\u5728\u4e3a\u5143\u7ec4\u7684\u7b2c\u4e00\u4e2a\u5b9e\u4f53\u5206\u914d\u5bc4\u5b58\u5668\u65f6\u63d0\u524d\u68c0\u67e5\u8fde\u7eed\u5bc4\u5b58\u5668\u662f\u5426\u7a7a\u95f2\uff0c\u786e\u4fdd\u5df2\u5206\u914d\u7684\u5bc4\u5b58\u5668\u662f\u8fde\u7eed\u7684\uff0c\u5982\u679c\u53d8\u91cf\u5df2\u7ecf\u5206\u914d\u4e86\u5bc4\u5b58\u5668\u5e76\u4e14\u5b83\u4eec\u4e0d\u8fde\u7eed\uff0c\u4ee5\u53ca\u5728\u53ef\u7528\u65f6\u6dfb\u52a0\u538b\u529b\u6d4b\u8bd5\u573a\u666f\u4ee5\u5904\u7406\u4ea4\u66ff\u5bc4\u5b58\u5668\u3002\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/85189\"><span data-contrast=\"none\">PR\uff0385189<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c@MihaZupan \u5728 ProbabilisticMap \u7684 IndexOf \u65b9\u6cd5\u4e2d\u4f7f\u7528 VectorTableLookup\uff0c\u5f97\u5230\u4e8630%\u7684\u63d0\u5347\u3002<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u4f18\u5316 ThreadStatic \u5b57\u6bb5\u8bbf\u95ee<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u8bbf\u95ee\u6807\u6709 <\/span><span data-contrast=\"none\">ThreadStatic<\/span><span data-contrast=\"auto\"> \u7684\u5b57\u6bb5\u5fc5\u987b\u901a\u8fc7\u8f85\u52a9\u8c03\u7528\uff0c\u8fd9\u4e9b\u8c03\u7528\u4f1a\u5728\u8bbf\u95ee\u5b57\u6bb5\u6570\u636e\u4e4b\u524d\u8bbf\u95ee\u5f53\u524d\u7ebf\u7a0b\u548c\u6a21\u5757\u7684\u7ebf\u7a0b\u5c40\u90e8\u5b58\u50a8\uff08TLS\uff09\u3002\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/82973\"><span data-contrast=\"none\">PR\uff0382973<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c\u6211\u4eec\u5c06\u6240\u6709\u8fd9\u4e9b\u4ee3\u7801\u5185\u8054\uff0c\u56e0\u6b64\u53ef\u4ee5\u5728\u4e0d\u8fdb\u5165\u8f85\u52a9\u51fd\u6570\u7684\u60c5\u51b5\u4e0b\u68c0\u7d22\u5b57\u6bb5\u7684\u503c\u3002\u8fd9\u5c06\u5b57\u6bb5\u8bbf\u95ee\u6027\u80fd\u63d0\u9ad8\u4e8610\u500d\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Arm64<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6211\u4eec\u7ee7\u7eed\u63d0\u9ad8 Arm64 \u7684\u4ee3\u7801\u8d28\u91cf\uff0c\u6211\u4eec\u7684\u670b\u53cb @SwapnilGaikwad \u548c @a74nh \u5728 Arm \u4e3a\u8be5\u7248\u672c\u505a\u51fa\u4e86\u4e00\u4e9b\u5f88\u597d\u7684\u8d21\u732e\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/84350\"><span data-contrast=\"none\">PR\uff0384350<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c\u5c06\u201cstr wzr\u201d\u5bf9\u4f18\u5316\u5e76\u66ff\u6362\u4e3a\u4e86\u201cstr xzr\u201d\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/84135\"><span data-contrast=\"none\">PR\uff0384135<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c\u9488\u5bf9 SIMD \u5bc4\u5b58\u5668\u542f\u7528\u4e86 ldp\/stp \u7684\u7aa5\u5b54\u4f18\u5316\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/83458\"><span data-contrast=\"none\">PR\uff0383458<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c\u5728\u53ef\u80fd\u7684\u60c5\u51b5\u4e0b\uff0c\u7528\u6210\u672c\u8f83\u4f4e\u7684 mov \u6307\u4ee4\u66ff\u6362\u4e86\u8d1f\u8f7d\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/79283\"><span data-contrast=\"none\">PR\uff0379283<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c\u5c06 if \u8bed\u53e5\u4e2d\u7684\u6761\u4ef6\u4e0e\u6bd4\u8f83\u94fe\u7ec4\u5408\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/82031\"><span data-contrast=\"none\">PR\uff0382031<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c\u5728\u53ef\u80fd\u7684\u60c5\u51b5\u4e0b\u5f00\u59cb\u4f7f\u7528 cinc \u800c\u4e0d\u662f csel\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/84667\"><span data-contrast=\"none\">PR\uff0384667<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c\u5c06&#8217;neg&#8217;\u548c&#8217;cmp&#8217;\u7ec4\u5408\u4e3a&#8217;cmn&#8217;<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/84605\"><span data-contrast=\"none\">PR\uff0384605<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c\u5c06 cmp \u548c shift \u64cd\u4f5c\u7ec4\u5408\u6210\u4e00\u4e2a cmp \u64cd\u4f5c<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/83694\"><span data-contrast=\"none\">PR\uff0383694<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c\u6dfb\u52a0 IsVNNeverNegative\uff08\u6539\u8fdb\u4e86\u6240\u6709\u67b6\u6784\uff0c\u4f46\u5bf9 ARM64 \u5f71\u54cd\u8f83\u5927\uff09<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u76f4\u5230\u73b0\u5728\uff0c\u5982\u679c\u5176\u4e2d\u4e00\u4e2a\u503c\u6765\u81ea\u5c40\u90e8\u53d8\u91cf\uff0c\u90a3\u4e48\u5c06\u4e0d\u4f1a\u6267\u884c load\/store pair \u7aa5\u5b54\u4f18\u5316\u3002<\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/84399\"><span data-contrast=\"none\">PR\uff0384399<\/span><\/a><span data-contrast=\"auto\"> \u4fee\u590d\u4e86\u8fd9\u4e2a\u9650\u5236\uff0c\u5e76\u5e7f\u6cdb\u542f\u7528\u4e86\u7aa5\u5b54\u4f18\u5316\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/85258\"><span data-contrast=\"none\">PR\uff0385258<\/span><\/a><span data-contrast=\"auto\"> \u4e2d\uff0c\u5c06 Arm64 \u4e0a\u7684 <\/span><span data-contrast=\"none\">&gt;&gt;&gt;<\/span><span data-contrast=\"auto\"> \u8fd0\u7b97\u7b26\u4f18\u5316\u4e3a ShiftRightLogical \u5185\u90e8\u6307\u4ee4\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u793e\u533a PR\uff08\u975e\u5e38\u611f\u8c22 JIT \u793e\u533a\u8d21\u732e\u8005\u4eec\uff01\uff09<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:260,&quot;335559739&quot;:260,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"49\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">@SingleAccretion \u5728 Preview 4 \u4e2d\u8d21\u732e\u4e86<\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pulls?q=is%253Apr+is%253Amerged+label%253Aarea-CodeGen-coreclr+closed%253A2023-03-21..2023-04-25++-milestone%253A7.0.x+author%253Asingleaccretion\"><span data-contrast=\"none\">20\u4e2a PR<\/span><\/a><span data-contrast=\"auto\">\u3002\u5176\u4e2d\u8bb8\u591a\u5de5\u4f5c\u96c6\u4e2d\u5728\u5185\u90e8\u6e05\u7406\u548c\u7b80\u5316\u90a3\u4e9b\u5728 JIT \u4e0a\u5de5\u4f5c\u7684\u6bcf\u4e2a\u4eba\u90fd\u9700\u8981\u7406\u89e3\u7684\u6982\u5ff5\u4e0a\u3002\u4f8b\u5982\uff0cJIT \u5185\u90e8 IR \u4e2d\u7684\u8bb8\u591a\u8282\u70b9\u7c7b\u578b\u5b8c\u5168\u88ab\u79fb\u9664\uff0c\u4ee5\u652f\u6301\u66f4\u89c4\u5219\u6216\u66f4\u7b80\u5355\u7684\u8868\u793a\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"50\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">@Ruihan-Yin \u5728 LinearScan:: buildPhysRegRecords \u4e0a\u6dfb\u52a0\u4e86\u5173\u4e8e zmm \u5bc4\u5b58\u5668\u7684\u5b8f\uff0c<\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/83862\"><span data-contrast=\"none\">PR\uff0383862<\/span><\/a><span data-contrast=\"auto\">\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"51\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u8bf7\u53c2\u8003 CodeGen Arm64 \u90e8\u5206\u4ee5\u4e86\u89e3 @a74nh \u548c @SwapnilGaikwad \u7684\u8d21\u732e\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u4ee3\u7801\u5411\u91cf\u5316<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">JIT\/NativeAOT \u73b0\u5728\u53ef\u4ee5\u4f7f\u7528 SIMD\uff08\u5305\u62ec x64 \u4e0a\u7684 AVX-512 \u6307\u4ee4\uff01\uff09\u5c55\u5f00\u5e76\u81ea\u52a8\u5411\u91cf\u5316\u5404\u79cd\u5185\u5b58\u64cd\u4f5c\uff0c\u5982\u6bd4\u8f83\u3001\u590d\u5236\u548c\u5f52\u96f6\uff0c\u5982\u679c\u5b83\u53ef\u4ee5\u5728\u7f16\u8bd1\u65f6\u786e\u5b9a\u5b83\u4eec\u7684\u5927\u5c0f\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"52\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/83255\"><span data-contrast=\"none\">PR\uff0383255<\/span><\/a><span data-contrast=\"auto\"> \u901a\u8fc7 SIMD \u4f7f stackalloc \u5f52\u96f6\u901f\u5ea6\u63d0\u9ad8\u4e862-3\u500d<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"53\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/83638\"><span data-contrast=\"none\">PR\uff0383638<\/span><\/a><span data-contrast=\"auto\">\u3001<\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/83740\"><span data-contrast=\"none\">PR\uff0383740<\/span><\/a><span data-contrast=\"auto\"> \u548c <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/84530\"><span data-contrast=\"none\">PR\uff0384530<\/span><\/a><span data-contrast=\"auto\"> \u4e3a\u5404\u79cd\u7c7b\u4f3c\u201c\u590d\u5236\u7f13\u51b2\u533a\u201d\u7684\u64cd\u4f5c\u542f\u7528\u81ea\u52a8\u5411\u91cf\u5316\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"54\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/83945\"><span data-contrast=\"none\">PR\uff0383945<\/span><\/a><span data-contrast=\"auto\"> \u5bf9\u6240\u6709\u539f\u59cb\u7c7b\u578b\u8fdb\u884c\u4e86\u76f8\u540c\u7684\u6bd4\u8f83\uff0c\u5305\u62ec SequenceEqual \u548c StartsWith\u3002\u4ee5\u4e0b\u4ee3\u7801\u7247\u6bb5\u662f JIT \u73b0\u5728\u53ef\u4ee5\u81ea\u52a8\u5411\u91cf\u5316\u7684\u4e00\u4e2a\u5f88\u597d\u7684\u793a\u4f8b\u6a21\u5f0f\uff1a<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">bool CopyFirst50Items(ReadOnlySpan&lt;int&gt; src, Span&lt;int&gt; dst) =&gt;\u00a0\u00a0\r\n\u00a0\u00a0\u00a0 src.Slice(0, 50).TryCopyTo(dst);\u00a0\r\n```csharp\u00a0\r\n```asm\r\n; Method CopyFirst50Items\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 push\u00a0\u00a0\u00a0\u00a0 rbp\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vzeroupper\u00a0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 mov\u00a0\u00a0\u00a0\u00a0\u00a0 rbp, rsp\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cmp\u00a0\u00a0\u00a0\u00a0\u00a0 edx, 50 ;; src.Length &gt;= 50 ?\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 jb\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SHORT G_M1291_IG05\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xor\u00a0\u00a0\u00a0\u00a0\u00a0 eax, eax\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cmp\u00a0\u00a0\u00a0\u00a0\u00a0 r8d, 50 ;; dst.Length &gt;= 50 ?\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 jb\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SHORT G_M1291_IG04\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vmovdqu\u00a0 zmm0, zmmword ptr [rsi]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vmovdqu\u00a0 zmm1, zmmword ptr [rsi+40H]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vmovdqu\u00a0 zmm2, zmmword ptr [rsi+80H]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vmovdqu\u00a0 xmm3, xmmword ptr [rsi+B8H]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vmovdqu\u00a0 zmmword ptr [rcx], zmm0\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vmovdqu\u00a0 zmmword ptr [rcx+40H], zmm1\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vmovdqu\u00a0 zmmword ptr [rcx+80H], zmm2\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vmovdqu\u00a0 xmmword ptr [rcx+B8H], xmm3\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 mov\u00a0\u00a0\u00a0\u00a0\u00a0 eax, 1\u00a0\r\nG_M1291_IG04:\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pop\u00a0\u00a0\u00a0\u00a0\u00a0 rbp\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ret\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\nG_M1291_IG05:\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 call\u00a0\u00a0\u00a0\u00a0 [System.ThrowHelper:ThrowArgumentOutOfRangeException()]\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 int3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n; Total bytes of code: 96 <\/code><\/pre>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728\u8fd9\u91cc\uff0cJIT \u4f7f\u7528\u4e863\u4e2a ZMM\uff08AVX-512\uff09\u5bc4\u5b58\u5668\u6765\u6267\u884c\u7c7b\u4f3c\u4e8e memmove \u7684\u64cd\u4f5c\u5e76\u5185\u8054\uff08\u5373\u4f7f src \u548c dst \u91cd\u53e0\uff09\u3002\u5bf9\u4e8e\u7f16\u8bd1\u65f6\u5e38\u91cf\u6570\u636e\uff08\u4f8b\u5982 utf8 \u5b57\u9762\u503c\uff09\uff0c\u5c06\u751f\u6210\u7c7b\u4f3c\u7684\u4ee3\u7801\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<pre class=\"prettyprint language-cs language-csharp\"><code class=\"language-cs language-csharp\">bool WriteHeader(Span&lt;int&gt; dst) =&gt; \"text\/html\"u8.CopyTo(dst);\u00a0\r\nbool StartsWithHeader(Span&lt;int&gt; dst) =&gt; dst.StartsWith(\"text\/html\"u8); <\/code><\/pre>\n<p><b><span data-contrast=\"auto\">\u4e00\u822c\u4f18\u5316<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"55\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/83911\"><span data-contrast=\"none\">PR\uff0383911<\/span><\/a><span data-contrast=\"auto\"> \u5728 NativeAOT \u4e2d\uff0c\u9759\u6001\u521d\u59cb\u5316\u73b0\u5728\u66f4\u4fbf\u5b9c\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"56\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/84213\"><span data-contrast=\"none\">PR\uff0384213<\/span><\/a><span data-contrast=\"auto\"> \u548c <\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/84231\"><span data-contrast=\"none\">PR\uff0384231<\/span><\/a><span data-contrast=\"auto\"> \u6539\u5584\u4e86 <\/span><span data-contrast=\"none\">arr[arr.Length &#8211; cns]<\/span><span data-contrast=\"auto\"> \u548c <\/span><span data-contrast=\"none\">arr[index % arr.Length]<\/span><span data-contrast=\"auto\"> \u6a21\u5f0f\u7684\u8fb9\u754c\u68c0\u67e5\u6d88\u9664\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"57\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u5bf9\u4e8e\u66f4\u591a\u60c5\u51b5\uff08\u5982\u5c0f\u7c7b\u578b\uff09\u542f\u7528\u4e86\u524d\u5411\u66ff\u6362\u4f18\u5316\uff0c<\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/83969\"><span data-contrast=\"none\">PR\uff0383969<\/span><\/a><span data-contrast=\"auto\">\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"58\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/85251\"><span data-contrast=\"none\">PR\uff0385251<\/span><\/a><span data-contrast=\"auto\"> \u5728\u5bc4\u5b58\u5668\u5206\u914d\u671f\u95f4\u6539\u5584\u4e86\u4e00\u4e9b\u6ea2\u51fa\u60c5\u51b5\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"59\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/84427\"><span data-contrast=\"none\">PR\uff0384427<\/span><\/a><span data-contrast=\"auto\"> \u6539\u5584\u4e86 PGO \u6267\u884c\u7684\u53ef\u6269\u5c55\u6027<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf06c\" data-font=\"Wingdings\" data-listid=\"60\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:420,&quot;335559991&quot;:420,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf06c&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">\u6211\u4eec\u7ee7\u7eed\u6539\u8fdb JIT \u5faa\u73af\u4f18\u5316\u529f\u80fd\u3002\u5728 Preview 4 \u4e2d\uff0c\u6211\u4eec\u6539\u8fdb\u4e86\u53ef\u8fbe\u6027\u96c6\u5408\u7684\u8ba1\u7b97\uff0c<\/span><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/84204\"><span data-contrast=\"none\">PR\uff0384204<\/span><\/a><span data-contrast=\"auto\">\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">\u793e\u533a\u7126\u70b9\uff08Lachlan Ennis\uff09<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:260,&quot;335559739&quot;:260,&quot;335559740&quot;:276}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-9.jpg\"><img decoding=\"async\" class=\"alignnone size-medium wp-image-379\" src=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-9-300x300.jpg\" alt=\"Image dotnet 8 p4 9\" width=\"300\" height=\"300\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-9-300x300.jpg 300w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-9-150x150.jpg 150w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-9-24x24.jpg 24w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-9-48x48.jpg 48w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-9-96x96.jpg 96w, https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-content\/uploads\/sites\/75\/2023\/06\/dotnet-8-p4-9.jpg 400w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><span data-contrast=\"auto\">\u6211\u7684\u540d\u5b57\u662f Lachlan Ennis\uff0c\u6211\u662f Expert1 \u7684\u5168\u6808\u8f6f\u4ef6\u5f00\u53d1\u4eba\u5458\uff0c\u4e3a\u6fb3\u5927\u5229\u4e9a\u7684\u4e2d\u5c0f\u578b\u91d1\u878d\u516c\u53f8\u7f16\u5199\u8f6f\u4ef6\u3002\u6211\u4f4f\u5728\u6fb3\u5927\u5229\u4e9a\u6606\u58eb\u5170\u5dde\u7684\u5e03\u91cc\u65af\u73ed\u5e02\u3002\u6211\u6bd5\u4e1a\u4e8e\u6606\u58eb\u5170\u79d1\u6280\u5927\u5b66\uff08QUT\uff09\uff0c\u83b7\u5f97\u4e86\u4fe1\u606f\u6280\u672f\u5b66\u58eb\u5b66\u4f4d\uff0c\u4f46\u6211\u7684\u5927\u90e8\u5206\u7f16\u7a0b\u6280\u80fd\u90fd\u662f\u5728\u5de5\u4f5c\u4e2d\u5b66\u5230\u7684\u3002\u6211\u4eec\u4e3b\u8981\u4f7f\u7528 .NET \u548c MSSQL \u7f16\u5199\u8f6f\u4ef6\u3002\u6211\u4eec\u8fd8\u4e3a\u6211\u4eec\u7684\u4ea7\u54c1\u4f7f\u7528 Winforms\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u6211\u5bf9 .NET \u7684\u7b2c\u4e00\u6b21\u8d21\u732e\u662f\u5728 dotnet\/msbuild \u4e2d\uff0c\u6211\u5229\u7528\u4ee3\u7801\u5206\u6790\u6765\u63d0\u9ad8\u4ee3\u7801\u8d28\u91cf\u548c\u6027\u80fd\u3002\u8fd9\u5e2e\u52a9 msbuild \u5728\u7f16\u7801\u6807\u51c6\u4e0a\u66f4\u63a5\u8fd1\u4e8e dotnet\/runtime\uff0c\u5e76\u542f\u7528\u4e86\u4ee3\u7801\u5206\u6790\u89c4\u5219\u3002\u7136\u540e\uff0c\u5f53\u6211\u5076\u7136\u53d1\u73b0\u4e00\u4e2a\u8ba8\u8bba Winforms \u4e92\u64cd\u4f5c\u5c42\u4ee5\u53ca\u5982\u4f55\u6539\u8fdb\u5b83\u7684\u95ee\u9898\u65f6\uff0c\u6211\u8f6c\u5411\u4e86 Winforms \u7684\u5de5\u4f5c\u3002\u6211\u4e4b\u524d\u5728 msbuild \u4e2d\u505a\u8fc7\u4e00\u4e9b\u5173\u4e8e\u4e92\u64cd\u4f5c\u7684\u5c0f\u5de5\u4f5c\uff0c\u770b\u5230\u5b83\u53ef\u80fd\u4f1a\u6709\u591a\u56f0\u96be\u3002\u6211\u5efa\u8bae Winforms \u4f7f\u7528 CsWin32\uff0c\u56e0\u4e3a\u5b83\u4f7f\u7528\u6e90\u4ee3\u7801\u751f\u6210\u5668\u521b\u5efa PInvokes \u4ee5\u53ca\u53cb\u597d\u7684\u91cd\u8f7d\u3002\u8fd9\u4e4b\u540e\u5f15\u53d1\u4e86 Microsoft\/CsWin32 \u548c Microsoft\/Win32Metadata \u4e2d\u8bb8\u591a\u95ee\u9898\u548c PR\uff0c\u4ee5\u4fbf\u4e3a Winforms \u63d0\u4f9b\u6240\u9700\u7684 API\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728\u5904\u7406\u4e92\u64cd\u4f5c\u66f4\u6539\u540e\uff0c\u6211\u8f6c\u5411 issue \u961f\u5217\uff0c\u5e2e\u52a9\u8c03\u67e5\u79ef\u538b\u7684\u95ee\u9898\u3002\u901a\u5e38\uff0cissue \u9700\u8981\u6709\u4eba\u63a8\u52a8\u8c03\u67e5\uff0c\u76f4\u5230 Winforms \u56e2\u961f\u80fd\u591f\u63a5\u7ba1\u8db3\u591f\u7684\u4fe1\u606f\uff0c\u6216\u8005\u5982\u679c\u95ee\u9898\u8db3\u591f\u660e\u663e\uff0c\u5219\u63d0\u4ea4\u4e00\u4e2a PR \u6765\u4fee\u590d\u8fd9\u4e2a issue\u3002\u6211\u4e5f\u4f1a\u5e2e\u5fd9\u5728\u793e\u533a\u4e2d\u52aa\u529b\u4e3a Winforms \u4ee3\u7801\u5e93\u6dfb\u52a0\u7a7a\u6ce8\u91ca\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u5728 dotnet \u5f00\u6e90\u8f6f\u4ef6\u4e0a\u5de5\u4f5c\u786e\u5b9e\u6709\u52a9\u4e8e\u6269\u5c55\u6211\u7684 dotnet\u3001C# \u548c winforms \u77e5\u8bc6\u3002\u5728\u8fd9\u65b9\u9762\uff0cWinforms \u56e2\u961f\u5e2e\u52a9\u5f88\u5927\uff0c\u4ed6\u4eec\u5728 PR \u548c issue \u4e2d\u63d0\u4f9b\u4e86\u8be6\u5c3d\u7684\u5ba1\u67e5\u548c\u5efa\u8bae\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">\u603b\u7ed3<\/span><\/b><span data-ccp-props=\"{&quot;335559738&quot;:260,&quot;335559739&quot;:260}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">.NET 8 \u9884\u89c8\u7248 4 \u5305\u542b\u4e86\u8bb8\u591a\u4ee4\u4eba\u5174\u594b\u7684\u65b0\u529f\u80fd\u548c\u6539\u8fdb\uff0c\u8fd9\u4e9b\u90fd\u79bb\u4e0d\u5f00\u5fae\u8f6f\u7684\u4e00\u652f\u591a\u5143\u5316\u5de5\u7a0b\u5e08\u56e2\u961f\u4ee5\u53ca\u5145\u6ee1\u6fc0\u60c5\u7684\u5f00\u6e90\u793e\u533a\u7684\u8f9b\u52e4\u5de5\u4f5c\u548c\u5949\u732e\u3002\u6211\u4eec<\/span><a href=\"https:\/\/dotnet.microsoft.com\/thanks\"><span data-contrast=\"none\">\u8877\u5fc3\u611f\u8c22\u6240\u6709\u8fc4\u4eca\u4e3a\u6b62\u4e3a .NET 8 \u505a\u51fa\u8d21\u732e\u7684\u4eba<\/span><\/a><span data-contrast=\"auto\">\uff0c\u65e0\u8bba\u662f\u901a\u8fc7\u4ee3\u7801\u8d21\u732e\u3001\u9519\u8bef\u62a5\u544a\u8fd8\u662f\u63d0\u4f9b\u53cd\u9988\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u60a8\u7684\u8d21\u732e\u5728\u5236\u4f5c .NET 8 \u9884\u89c8\u7248\u4e2d\u8d77\u5230\u4e86\u5173\u952e\u4f5c\u7528\uff0c\u6211\u4eec\u671f\u5f85\u7ee7\u7eed\u643a\u624b\u5171\u5efa .NET \u548c\u6574\u4e2a\u6280\u672f\u793e\u533a\u66f4\u52a0\u7f8e\u597d\u7684\u672a\u6765\u3002<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">\u60f3\u77e5\u9053\u5373\u5c06\u5230\u6765\u7684\u662f\u4ec0\u4e48\u5417\uff1f<\/span><a href=\"https:\/\/dotnet.microsoft.com\/next\"><span data-contrast=\"none\">\u6765\u770b\u770b .NET \u63a5\u4e0b\u6765\u4f1a\u6709\u4ec0\u4e48\u65b0\u53d8\u5316\uff01<\/span><\/a><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f5c\u8005\uff1aJon Douglas &#8211; Principal Program Manager, NuGet\u00a0 \u7ffb\u8bd1\uff1aAlan Wang\u00a0 \u6211\u4eec\u5f88\u9ad8\u5174\u4e0e\u5927\u5bb6\u5206\u4eab\u5728 .NET 8 \u9884\u89c8\u7248 4 \u4e2d\u7684\u6240\u6709\u65b0\u529f\u80fd\u548c\u6539\u8fdb\uff01\u8fd9\u6b21\u53d1\u5e03\u662f\u7ee7\u9884\u89c8\u7248 3\u4e4b\u540e\u7684\u66f4\u65b0\u3002\u60a8\u5c06\u5728\u8fd9\u4e9b\u6708\u5ea6\u53d1\u5e03\u4e2d\u770b\u5230\u66f4\u591a\u529f\u80fd\u9010\u6e10\u4eae\u76f8\u3002.NET 6 \u548c 7 \u7684\u7528\u6237\u5c06\u5e0c\u671b\u5bc6\u5207\u5173\u6ce8\u6b64\u7248\u672c\uff0c\u56e0\u4e3a\u6211\u4eec\u4e13\u6ce8\u4e8e\u4f7f\u5347\u7ea7\u8fc7\u7a0b\u53d8\u5f97\u975e\u5e38\u7b80\u5355\u3002\u00a0 \u60a8\u53ef\u4ee5\u4e3a Linux\u3001macOS \u548c Windows \u4e0b\u8f7d .NET 8 \u9884\u89c8\u7248 4\u3002\u00a0 \u5b89\u88c5\u7a0b\u5e8f\u548c\u4e8c\u8fdb\u5236\u6587\u4ef6\u00a0 \u5bb9\u5668\u955c\u50cf\u00a0 \u53d1\u884c\u8bf4\u660e\u00a0 \u5df2\u77e5\u95ee\u9898\u00a0 GitHub \u95ee\u9898\u8ddf\u8e2a\u5668\u00a0 Microsoft Build 2023 \u5373\u5c06\u5230\u6765\uff01 .NET \u56e2\u961f\u5c06\u4e3e\u529e\u4e00\u7cfb\u5217\u6d3b\u52a8\uff0c\u4ece\u6280\u672f\u6df1\u5ea6\u6316\u6398\u5230\u4e0e\u56e2\u961f\u8fdb\u884c\u95ee\u7b54\u3002\u5728 Microsoft Build 2023 \u4e2d\u52a0\u5165 .NET \u56e2\u961f\uff01\u00a0 \u67e5\u770b\u5728\u9884\u89c8\u7248 4 \u53d1\u5e03\u4e2d ASP.NET Core \u548c EF Core [&hellip;]<\/p>\n","protected":false},"author":99474,"featured_media":377,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-372","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet-ch"],"acf":[],"blog_post_summary":"<p>\u4f5c\u8005\uff1aJon Douglas &#8211; Principal Program Manager, NuGet\u00a0 \u7ffb\u8bd1\uff1aAlan Wang\u00a0 \u6211\u4eec\u5f88\u9ad8\u5174\u4e0e\u5927\u5bb6\u5206\u4eab\u5728 .NET 8 \u9884\u89c8\u7248 4 \u4e2d\u7684\u6240\u6709\u65b0\u529f\u80fd\u548c\u6539\u8fdb\uff01\u8fd9\u6b21\u53d1\u5e03\u662f\u7ee7\u9884\u89c8\u7248 3\u4e4b\u540e\u7684\u66f4\u65b0\u3002\u60a8\u5c06\u5728\u8fd9\u4e9b\u6708\u5ea6\u53d1\u5e03\u4e2d\u770b\u5230\u66f4\u591a\u529f\u80fd\u9010\u6e10\u4eae\u76f8\u3002.NET 6 \u548c 7 \u7684\u7528\u6237\u5c06\u5e0c\u671b\u5bc6\u5207\u5173\u6ce8\u6b64\u7248\u672c\uff0c\u56e0\u4e3a\u6211\u4eec\u4e13\u6ce8\u4e8e\u4f7f\u5347\u7ea7\u8fc7\u7a0b\u53d8\u5f97\u975e\u5e38\u7b80\u5355\u3002\u00a0 \u60a8\u53ef\u4ee5\u4e3a Linux\u3001macOS \u548c Windows \u4e0b\u8f7d .NET 8 \u9884\u89c8\u7248 4\u3002\u00a0 \u5b89\u88c5\u7a0b\u5e8f\u548c\u4e8c\u8fdb\u5236\u6587\u4ef6\u00a0 \u5bb9\u5668\u955c\u50cf\u00a0 \u53d1\u884c\u8bf4\u660e\u00a0 \u5df2\u77e5\u95ee\u9898\u00a0 GitHub \u95ee\u9898\u8ddf\u8e2a\u5668\u00a0 Microsoft Build 2023 \u5373\u5c06\u5230\u6765\uff01 .NET \u56e2\u961f\u5c06\u4e3e\u529e\u4e00\u7cfb\u5217\u6d3b\u52a8\uff0c\u4ece\u6280\u672f\u6df1\u5ea6\u6316\u6398\u5230\u4e0e\u56e2\u961f\u8fdb\u884c\u95ee\u7b54\u3002\u5728 Microsoft Build 2023 \u4e2d\u52a0\u5165 .NET \u56e2\u961f\uff01\u00a0 \u67e5\u770b\u5728\u9884\u89c8\u7248 4 \u53d1\u5e03\u4e2d ASP.NET Core \u548c EF Core [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/posts\/372","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/users\/99474"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/comments?post=372"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/posts\/372\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/media\/377"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/media?parent=372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/categories?post=372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet-ch\/wp-json\/wp\/v2\/tags?post=372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}