{"id":39105,"date":"2022-03-14T17:54:39","date_gmt":"2022-03-15T00:54:39","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/dotnet\/?p=39105"},"modified":"2022-03-16T10:29:54","modified_gmt":"2022-03-16T17:29:54","slug":"announcing-dotnet-7-preview-2","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-dotnet-7-preview-2\/","title":{"rendered":"Announcing .NET 7 Preview 2 &#8211; The New, &#8216;New&#8217; Experience"},"content":{"rendered":"<p>Today, we are glad to release .NET 7 Preview 2. The second preview of .NET 7 includes enhancements to RegEx source generators, progress moving NativeAOT from experimental status into the runtime, and a major set of improvements to the &#8220;dotnet new&#8221; CLI experience. The bits are available for you to grab <em>right now<\/em> and start experimenting with new features like:<\/p>\n<ul>\n<li>Build a specialized RegEx pattern matching engine using source generators at compile-time rather than slower methods at runtime.<\/li>\n<li>Take advantage of SDK improvements that provide an entirely new, streamlined tab completion experience to explore templates and parameters when running <code>dotnet new<\/code>.<\/li>\n<li>Don&#8217;t trim your excitement, just your apps in preparation to try out NativeAOT with your own innovative solutions.<\/li>\n<\/ul>\n<p>EF7 preview 2 was also released and is <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.EntityFrameworkCore\/7.0.0-preview.2.22153.1\" target=\"_blank\" rel=\"noopener\">available on NuGet<\/a>. You can also read <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/asp-net-core-updates-in-dotnet-7-preview-2\/\" target=\"_blank\" rel=\"noopener\">what&#8217;s new in ASP.NET Core Preview 2<\/a>.<\/p>\n<p>You can <a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet\/7.0\">download .NET 7 Preview 2<\/a>, for Windows, macOS, and Linux.<\/p>\n<ul>\n<li><a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet\/7.0\">Installers and binaries<\/a><\/li>\n<li><a href=\"https:\/\/hub.docker.com\/_\/microsoft-dotnet\">Container images<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/master\/release-notes\/7.0\/\">Linux packages<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/tree\/master\/release-notes\/7.0\">Release notes<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/main\/release-notes\/7.0\/known-issues.md\">Known issues<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/issues\">GitHub issue tracker<\/a><\/li>\n<\/ul>\n<p>We recommend you use the <a href=\"https:\/\/visualstudio.com\/preview\">preview channel builds<\/a> if you want to try .NET 7 with Visual Studio family products. Visual Studio for Mac support for .NET 7 previews isn\u2019t available yet but is coming soon.<\/p>\n<h2>Preview 2<\/h2>\n<p>The following features are now available in the Preview 2 release.<\/p>\n<h3>Introducing the new Regex Source Generator<\/h3>\n<p><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/44676\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/dotnet\/runtime\/issues\/44676<\/a><\/p>\n<p>Have you ever wished you had all of the great benefits that come from having a specialized Regex engine that is optimized for your particular pattern, without the overhead of building this engine at runtime?<\/p>\n<p>We are excited to announce the new Regex Source Generator which was included in Preview 1. It brings all of the performance benefits from our compiled engine without the startup cost, and it has additional benefits, like providing a great debugging experience as well as being trimming-friendly. If your pattern is known at compile-time, then the new regex source generator is the way to go.<\/p>\n<p>In order to start using it, you only need to turn the containing type into a <code>partial<\/code> one, and declare a new partial method with the <code>RegexGenerator<\/code> attribute that will return the optimized <code>Regex<\/code> object, and that&#8217;s it! The source generator will fill the implementation of that method for you, and will get updated automatically as you make changes to your pattern or to the additional options that you pass in. Here is an example:<\/p>\n<h4>Before<\/h4>\n<pre><code class=\"language-c#\">public class Foo\r\n{\r\n  public Regex regex = new Regex(@\"abc|def\", RegexOptions.IgnoreCase);\r\n\r\n  public bool Bar(string input)\r\n  {\r\n    bool isMatch = regex.IsMatch(input);\r\n    \/\/ ..\r\n  }\r\n}<\/code><\/pre>\n<h4>After<\/h4>\n<pre><code class=\"language-c#\">public partial class Foo  \/\/ &lt;-- Make the class a partial class\r\n{\r\n  [RegexGenerator(@\"abc|def\", RegexOptions.IgnoreCase)] \/\/ &lt;-- Add the RegexGenerator attribute and pass in your pattern and options\r\n  public static partial Regex MyRegex(); \/\/  &lt;-- Declare the partial method, which will be implemented by the source generator\r\n\r\n  public bool Bar(string input)\r\n  {\r\n    bool isMatch = MyRegex().IsMatch(input); \/\/ &lt;-- Use the generated engine by invoking the partial method.\r\n    \/\/ ..\r\n  }\r\n}<\/code><\/pre>\n<p>And that&#8217;s it. Please try it out and let us know if you have any feedback.<\/p>\n<h3>CodeGen<\/h3>\n<p>Community PRs (Many thanks to JIT community contributors!!)<\/p>\n<p>From @sandreenko<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64506\">[Jit] Delete Statement::m_compilerAdded .\u00a0runtime#64506<\/a><\/li>\n<\/ul>\n<p>From @SingleAccretion<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63026\">Delete\u00a0GT_DYN_BLK\u00a0runtime#63026<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63100\">Address-expose locals under complex local addresses in block morphing\u00a0runtime#63100<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63251\">Refactor optimizing morph for commutative operations\u00a0runtime#63251<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63268\">Preserve\u00a0OBJ\/BLK\u00a0on the RHS of\u00a0ASG\u00a0runtime#63268<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63447\">Handle embedded assignments in copy propagation\u00a0runtime#63447<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63462\">Do not set\u00a0GTF_NO_CSE\u00a0for sources of block copies\u00a0runtime#63462<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63539\">Exception sets: debug checker &amp; fixes\u00a0runtime#63539<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63845\">Stop using\u00a0CLS_VAR\u00a0for &#8220;boxed statics&#8221;\u00a0runtime#63845<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63903\">Tune floating-point CSEs live across a call better\u00a0runtime#63903<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63957\">Reverse\u00a0ASG(CLS_VAR, &#8230;)\u00a0runtime#63957<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64012\">Fix invalid threading of nodes in rationalization\u00a0runtime#64012<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64106\">Add the exception set for\u00a0ObjGetType\u00a0runtime#64106<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64110\">Improve\u00a0fgValueNumberBlockAssignment\u00a0runtime#64110<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64122\">Commutative morph optimizations\u00a0runtime#64122<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64230\">Fix unique VNs for\u00a0ADDRs\u00a0runtime#64230<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64378\">Copy propagation tweaking\u00a0runtime#64378<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64498\">Introduce\u00a0GenTreeDebugOperKind\u00a0runtime#64498<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64501\">Add support for\u00a0TYP_BYREF\u00a0LCL_FLDs to VN\u00a0runtime#64501<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64607\">Do not add NRE sets for non-null addresses\u00a0runtime#64607<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64701\">Take into account zero-offset field sequences when propagating locals\u00a0runtime#64701<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64826\">Another size estimate fix for\u00a0movs\u00a0runtime#64826<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64855\">Mark promoted SIMD locals used by HWIs as DNER\u00a0runtime#64855<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64882\">Propagate exception sets for assignments\u00a0runtime#64882<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/65079\">Account for HWI stores in LIR side effects code\u00a0runtime#65079<\/a><\/li>\n<\/ul>\n<p>From @Wraith2<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63545\">Recognize BLSR in &#8220;x &amp; (x-1)&#8221;\u00a0Add blsr\u00a0runtime#63545<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64350\">Add xarch\u00a0andn\u00a0runtime#64350<\/a><\/li>\n<\/ul>\n<h3>Dynamic PGO<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63720\">JIT: simple forward substitution pass\u00a0runtime#63720<\/a><\/li>\n<\/ul>\n<h3>Arm64<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64481\">Local heap optimizations on Arm64\u00a0runtime#64481<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64857\">Couple optimization to MultiRegStoreLoc\u00a0runtime#64857<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64864\">Implement LoadPairVector64 and LoadPairVector128\u00a0runtime#64864<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/62933\">&#8216;cmeq&#8217; and &#8216;fcmeq&#8217; Vector64.Zero\/Vector128.Zero ARM64 containment optimizations\u00a0runtime#62933<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/65153\">Increase arm32\/arm64 maximum instruction group size\u00a0runtime#65153<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64740\">Prefer &#8220;mov reg, wzr&#8221; over &#8220;mov reg, #0&#8221;\u00a0runtime#64740<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64576\">Biggen GC Gen0 for Apple M1\u00a0Fix LLC cache issue on Apple M1\u00a0runtime#64576<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64354\">Optimize full memory barriers around volatile reads\/writes\u00a0ARM64: Avoid LEA for volatile IND\u00a0runtime#64354<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64016\">Optimize Math.Round(x, MidpointRounding.AwayFromZero\/ToEven)\u00a0runtime#64016<\/a><\/li>\n<\/ul>\n<h3>General Optimizations<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/63763\">Security:\u00a0Add JIT support for control-flow guard on x64 and arm64\u00a0runtime#63763<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/64119\">Testing:\u00a0Spmi replay asmdiffs mac os arm64\u00a0runtime#64119<\/a><\/li>\n<\/ul>\n<h3>Observability<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/63648\">Support Metrics UpDownCounter instrument runtime#63648<\/a><\/li>\n<\/ul>\n<pre><code class=\"language-C#\">static Meter s_meter = new Meter(\"MyLibrary.Queues\", \"1.0.0\");\r\nstatic UpDownCounter&lt;int&gt; s_queueSize = s_meter.CreateUpDownCounter&lt;int&gt;(\"Queue-Size\");\r\nstatic ObservableUpDownCounter&lt;int&gt; s_pullQueueSize = s_meter.CreateObservableUpDownCounter&lt;int&gt;(\"Queue-Size\", () =&gt; s_pullQueueSize);\r\n\r\n...\r\n\r\ns_queueSize.Add(10);\r\ns_queueSize.Add(-2);<\/code><\/pre>\n<h3>Logging source generator improvements<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/64310\">Logging source generator should gracefully fail when special parameters incorrectly get passed as template parameter runtime#64310<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/62644\">Logging Source Generator fails to compile when in parameter modifier is present runtime#62644<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/60968\">Logging Source Generator fails to compile using keyword parameters with @ prefixes runtime#60968<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/61814\">Logging Source Generator fails ungracefully with overloaded methods runtime#61814<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/58550\">Logging Source Generator fails to compile due to CS0246 and CS0265 errors if type for generic constraint is in a different namespace runtime#58550<\/a><\/li>\n<\/ul>\n<h3>SDK Improvements<\/h3>\n<p><strong><a href=\"https:\/\/github.com\/dotnet\/templating\/issues\/2191\">[Epic] New CLI parser + tab completion #2191<\/a><\/strong><\/p>\n<p>For <code>7.0.100-preview2<\/code>, the <code>dotnet new<\/code> command has been given a more consistent and intuitive interface for many of the subcommands that users already use. In addition, support for tab completion of template options and arguments has been massively updated, now giving rapid feedback on valid arguments and options as the user types.<\/p>\n<p>Here&#8217;s the new help output as an example:<\/p>\n<pre><code class=\"language-C#\">\u276f dotnet new --help\r\nDescription:\r\n  Template Instantiation Commands for .NET CLI.\r\n\r\nUsage:\r\n  dotnet new [&lt;template-short-name&gt; [&lt;template-args&gt;...]] [options]\r\n  dotnet new [command] [options]\r\n\r\nArguments:\r\n  &lt;template-short-name&gt;  A short name of the template to create.\r\n  &lt;template-args&gt;        Template specific options to use.\r\n\r\nOptions:\r\n  -?, -h, --help  Show command line help.\r\n\r\nCommands:\r\n  install &lt;package&gt;       Installs a template package.\r\n  uninstall &lt;package&gt;     Uninstalls a template package.\r\n  update                  Checks the currently installed template packages for update, and install the updates.\r\n  search &lt;template-name&gt;  Searches for the templates on NuGet.org.\r\n  list &lt;template-name&gt;    Lists templates containing the specified template name. If no name is specified, lists all templates.<\/code><\/pre>\n<h4>New Command Names<\/h4>\n<p>Specifically, all of the <em>commands<\/em> in this help output no longer have the <code>--<\/code> prefix that they do today. This is more in line with what users expect from subcommands in a CLI application. The old versions (<code>--install<\/code>, etc) are still available to prevent breaking user scripts, but we hope to add obsoletion warnings to those commands in the future to encourage migration.<\/p>\n<h4>Tab Completion<\/h4>\n<p>The <code>dotnet<\/code> CLI has supported tab completion for quite a while on popular shells like PowerShell, bash, zsh, and fish (for instructions on how to enable that, see <a href=\"https:\/\/docs.microsoft.com\/dotnet\/core\/tools\/enable-tab-autocomplete\">How to enable TAB completion for the .NET CLI<\/a>). It&#8217;s up to individual <code>dotnet<\/code> commands to implement meaningful completions, however. For .NET 7, the <code>new<\/code> command learned how to provide tab completion for<\/p>\n<ul>\n<li>Available template names (in <code>dotnet new &lt;template-short-name&gt;<\/code>)<\/li>\n<\/ul>\n<pre><code class=\"language-shell\">\u276f dotnet new angular\r\nangular              grpc                 razor                viewstart            worker               -h\r\nblazorserver         mstest               razorclasslib        web                  wpf                  \/?\r\nblazorwasm           mvc                  razorcomponent       webapi               wpfcustomcontrollib  \/h\r\nclasslib             nugetconfig          react                webapp               wpflib               install\r\nconsole              nunit                reactredux           webconfig            wpfusercontrollib    list\r\neditorconfig         nunit-test           sln                  winforms             xunit                search\r\ngitignore            page                 tool-manifest        winformscontrollib   --help               uninstall\r\nglobaljson           proto                viewimports          winformslib          -?                   update<\/code><\/pre>\n<ul>\n<li>Template options (the list of template options in the <code>web<\/code> template)<\/li>\n<\/ul>\n<pre><code class=\"language-shell\">\u276f dotnet new web --dry-run\r\n--dry-run                  --language                 --output                   -lang\r\n--exclude-launch-settings  --name                     --type                     -n\r\n--force                    --no-https                 -?                         -o\r\n--framework                --no-restore               -f                         \/?\r\n--help                     --no-update-check          -h                         \/h<\/code><\/pre>\n<ul>\n<li>Allowed values for those template options (choice values on an choice template argument)<\/li>\n<\/ul>\n<pre><code class=\"language-shell\">\u276f dotnet new blazorserver --auth Individual\r\nIndividual     IndividualB2C  MultiOrg       None           SingleOrg      Windows<\/code><\/pre>\n<p>There are a few known gaps in completion &#8211; for example, <code>--language<\/code> doesn&#8217;t suggest installed language values.<\/p>\n<h4>Future work<\/h4>\n<p>In future previews, we plan to continue filling gaps left by this transition, as well as make enabling completions either automatic or as simple as a single command that the user can execute. We hope that this will make improvements in tab completion across the entire <code>dotnet<\/code> CLI more broadly used by the community!<\/p>\n<h4>What&#8217;s next<\/h4>\n<p><code>dotnet new<\/code> users &#8211; go enable tab completion and try it for your templating use! Template authors &#8211; try out tab completion for the options on your templates and make sure you&#8217;re delivering the experiences you want your users to have. Everyone &#8211; raise any issues you find on the <a href=\"https:\/\/github.com\/dotnet\/templating\">dotnet\/templating<\/a> repo and help us make .NET 7 the best release for <code>dotnet new<\/code> ever!<\/p>\n<h3>NativeAOT Update<\/h3>\n<p>We previously announced that we&#8217;re <a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/61231\">moving the NativeAOT project<\/a> out of experimental status and into mainline development in .NET 7. Over the past few months, we&#8217;ve been heads down doing the coding to move NativeAOT out of the experimental <a href=\"https:\/\/github.com\/dotnet\/runtimelab\">dotnet\/runtimelab repo<\/a> and into the <a href=\"https:\/\/github.com\/dotnet\/runtime\">dotnet\/runtime<\/a> repo.<\/p>\n<p>That work has now been completed, but we have yet to add first-class support in the dotnet SDK for publishing projects with NativeAOT. We hope to have that work done shortly, so you can try out NativeAOT with your apps. In the meantime, please try <a href=\"https:\/\/docs.microsoft.com\/dotnet\/core\/deploying\/trimming\/trim-self-contained\">trimming your app<\/a> and ensure there are no trim warnings. Trimming is a requirement of NativeAOT. If you own any libraries there are also instructions for <a href=\"https:\/\/docs.microsoft.com\/dotnet\/core\/deploying\/trimming\/prepare-libraries-for-trimming\">preparing libraries for trimming<\/a>.<\/p>\n<h2>Targeting .NET 7<\/h2>\n<p>To target .NET 7, you need to use a .NET 7 Target Framework Moniker (TFM) in your project file. For example:<\/p>\n<pre><code class=\"language-xml\">&lt;TargetFramework&gt;net7.0&lt;\/TargetFramework&gt;<\/code><\/pre>\n<p>The full set of .NET 7 TFMs, including operating-specific ones follows.<\/p>\n<ul>\n<li><code>net7.0<\/code><\/li>\n<li><code>net7.0-android<\/code><\/li>\n<li><code>net7.0-ios<\/code><\/li>\n<li><code>net7.0-maccatalyst<\/code><\/li>\n<li><code>net7.0-macos<\/code><\/li>\n<li><code>net7.0-tvos<\/code><\/li>\n<li><code>net7.0-windows<\/code><\/li>\n<\/ul>\n<p>We expect that upgrading from .NET 6 to .NET 7 should be straightforward. Please report any breaking changes that you discover in the process of testing existing apps with .NET 7.<\/p>\n<h2>Support<\/h2>\n<p>.NET 7 is a <strong>Current<\/strong> release, meaning it will receive free support and patches for 18 months from the release date. It&#8217;s important to note that the quality of all releases is the same. The only difference is the length of support. For more about .NET support policies, see the <a href=\"https:\/\/dotnet.microsoft.com\/platform\/support\/policy\/dotnet-core\">.NET and .NET Core official support policy<\/a>.<\/p>\n<h2>Breaking changes<\/h2>\n<p>You can find the most recent list of breaking changes in .NET 7 by reading the <a href=\"https:\/\/docs.microsoft.com\/dotnet\/core\/compatibility\/7.0\">Breaking changes in .NET 7<\/a> document. It lists breaking changes by area and release with links to detailed explanations.<\/p>\n<p>To see what breaking changes are proposed but still under review, follow the <a href=\"https:\/\/github.com\/dotnet\/core\/issues\/7131\">Proposed .NET Breaking Changes GitHub issue<\/a>.<\/p>\n<h2>Roadmaps<\/h2>\n<p>Releases of .NET include products, libraries, runtime, and tooling, and represent a collaboration across multiple teams inside and outside Microsoft. You can learn more about these areas by reading the product roadmaps:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/dotnet\/aspnetcore\/issues\/39504\">ASP.NET Core 7 and Blazor Roadmap<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/ef\/core\/what-is-new\/ef-core-7.0\/plan\">EF 7 Roadmap<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/machinelearning\/blob\/main\/ROADMAP.md\">ML.NET<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/maui\/wiki\/Roadmap\">.NET MAUI<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/winforms\/blob\/main\/docs\/roadmap.md\">WinForms<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/wpf\/blob\/main\/roadmap.md\">WPF<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/NuGet\/Home\/issues\/11571\">NuGet<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/roslyn\/blob\/main\/docs\/Language%20Feature%20Status.md\">Roslyn<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dotnet\/core\/blob\/main\/roadmap.md\">Runtime<\/a><\/li>\n<\/ul>\n<h2>Closing<\/h2>\n<p>We appreciate and <a href=\"https:\/\/dotnet.microsoft.com\/thanks\">thank you<\/a> for your all your support and contributions to .NET. Please give .NET 7 Preview 2 a try and tell us what you think!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>.NET 7 Preview 2 is now available with enhancements to RegEx source generators, progress moving NativeAOT into the runtime, and a major set of improvements to the &#8216;dotnet new&#8217; CLI experience.<\/p>\n","protected":false},"author":127,"featured_media":39106,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[685],"tags":[4,7611,30,7265],"class_list":["post-39105","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","tag-net","tag-dotnet-7","tag-announcement","tag-announcements"],"acf":[],"blog_post_summary":"<p>.NET 7 Preview 2 is now available with enhancements to RegEx source generators, progress moving NativeAOT into the runtime, and a major set of improvements to the &#8216;dotnet new&#8217; CLI experience.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/39105","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/127"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=39105"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/39105\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/39106"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=39105"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=39105"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=39105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}