{"id":247038,"date":"2024-02-13T10:23:33","date_gmt":"2024-02-13T18:23:33","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/visualstudio\/?p=247038"},"modified":"2024-03-05T16:42:15","modified_gmt":"2024-03-06T00:42:15","slug":"visual-studio-2022-17-9-now-available","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/visualstudio\/visual-studio-2022-17-9-now-available\/","title":{"rendered":"Visual Studio 2022 17.9 Now Available"},"content":{"rendered":"<p>Welcome to Visual Studio 2022 17.9! This <span class=\"ui-provider a b c d e f g h i j k l m n o p q r s t u v w x y z ab ac ae af ag ah ai aj ak\" dir=\"ltr\">release comes with more capabilities and improvements that enhance productivity for you and your team, such as AI-assistance and better extensibility. Plus, we&#8217;re always improving core productivity and performance! We\u2019ve included suggestions from you in the community and are publishing more about our backlogs in our <a href=\"https:\/\/learn.microsoft.com\/en-us\/visualstudio\/releases\/2022\/release-notes\">release notes<\/a> and <a href=\"https:\/\/developercommunity.visualstudio.com\/VisualStudio?q=%5Bvs-core-ide-roadmap%5D&amp;ftype=idea&amp;stateGroup=active\">roadmap<\/a>.<\/span><\/p>\n<p>From AI-powered Git commit messages and enhanced C++ game development tools to .NET\/C# advancements and responsive project management capabilities, this release caters to a wide array of you and your team&#8217;s development needs.<\/p>\n<p>Dive into a more efficient development experience with Visual Studio 2022 17.9 and unlock your potential to create, collaborate, and innovate more effectively.<\/p>\n<p><div  class=\"d-flex justify-content-center\"><a class=\"cta_button_link btn-primary mb-24\" href=\"https:\/\/visualstudio.microsoft.com\/downloads\/\" target=\"_blank\">Download 17.9 Now<\/a><\/div><\/p>\n<p>Here are some of the major areas we\u2019ve focused on in this release:<\/p>\n<table class=\" aligncenter\" style=\"height: 100%; width: 90%;\">\n<tbody>\n<tr style=\"height: 28px;\">\n<td style=\"width: 23.6967%; height: 28px;\" width=\"150\"><strong>Area<\/strong><\/td>\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\"><strong>Enhancements<\/strong><\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><strong>Developer Community Link<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 23.6967%; height: 280px;\" rowspan=\"10\" width=\"150\"><strong>Productivity<\/strong><\/td>\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">AI-generated Git commit messages<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/Share-your-feedback-and-suggestions-for-\/10521111\">Discussion<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Open a Pull Request from Visual Studio or the browser<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Event Handler Leak insights<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Instrumentation \u201cStart with Collection Pause\u201d<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/removed-profiling-options-Instrumenting\/10385122\">Discussion<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Switch between single and multiple rows in the document well<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/scrollable-open-file-tabs-with-mouse-wheel\/353560\">Discussion<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Non-modal Debug Visualizers<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Responsive Git Ref labels<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/Commit-graph-in-Visual-Studio-177-needl\/10437569\">Discussion<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Multi-project configuration<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Multi-folder open support<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><a href=\"https:\/\/learn.microsoft.com\/en-us\/visualstudio\/ide\/develop-code-in-visual-studio-without-projects-or-solutions?view=vs-2022#to-open-multiple-folders\">Learn More<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Auto-surround selections with quotes or brackets<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/enable-the-ability-to-surround-a-selection-with-or\/641608\">Discussion<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 23.6967%; height: 168px;\" rowspan=\"6\" width=\"150\"><strong>C++ Game Dev<\/strong><\/td>\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Streamlined UE Blueprint references<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/Unreal-Engine---Visual-Studio-Integratio\/10278703\">Discussion<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Improved IntelliSense for Unreal Engine<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Remote Linux unit testing<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Specify custom CMake executable<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Memory Layout for classes, structs, and unions<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/add-tools-to-display-c-class-memory-layout\/392536\">Discussion<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">#include reference diagnostics<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 23.6967%; height: 140px;\" rowspan=\"5\" width=\"150\"><strong>.NET\/C#<\/strong><\/td>\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Automatic Deoptimization<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Blazor CRUD scaffolding<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Razor snippets<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Multi-tfm support for Razor files<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Live Property Explorer support for .NET MAUI<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/Live-Property-Explorer-doesnt-show-prop\/1703289\">Discussion<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 23.6967%; height: 28px;\" rowspan=\"2\" width=\"150\"><strong>Ecosystem<\/strong><\/td>\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Ability to load extensions using .vsconfig files<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><a href=\"https:\/\/developercommunity.visualstudio.com\/t\/a-vsconfig-file-should-automatically-prompt-to-ins\/518364\">Discussion<\/a><\/td>\n<\/tr>\n<tr style=\"height: 28px;\">\n<td style=\"width: 51.6123%; height: 28px;\" width=\"291\">Discover subscriber benefits<\/td>\n<td style=\"width: 22.4794%; height: 28px;\" width=\"191\"><a href=\"https:\/\/my.visualstudio.com\">Learn More<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><\/h2>\n<h2>Productivity<\/h2>\n<h2>AI Generated Git commit messages<\/h2>\n<p>One of the things I always struggle with is coming up with descriptive Git commit messages for whatever changes I&#8217;ve made in my local repo. The new generated commit message feature is designed to assist you in succinctly describing your changes, ensuring clarity and relevance in your commits.<\/p>\n<p><div style=\"width: 1920px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-247038-1\" width=\"1920\" height=\"1080\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/AI-Generated-Commit.mp4?_=1\" \/><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/AI-Generated-Commit.mp4\">https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/AI-Generated-Commit.mp4<\/a><\/video><\/div><\/p>\n<p>To get started, ensure you have an active GitHub Copilot subscription along with the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=VisualStudioExptTeam.VSGitHubCopilot\">GitHub Copilot Chat Extension<\/a> installed. Simply click the &#8216;Add AI Generated Commit Message&#8217; sparkle pen icon within the Git Changes window for a suggested commit message. GitHub Copilot analyzes your commit&#8217;s file changes, provides a summary, and then offers a descriptive message for each change. Choose to &#8216;Insert AI Suggestion&#8217; or &#8216;Discard&#8217; based on your preference. We welcome your feedback on this feature at <a href=\"https:\/\/aka.ms\/AICommitMessages\">this link<\/a>.<\/p>\n<h2>Open a Pull Request in Visual Studio or the browser<\/h2>\n<p>To support GitHub and Azure DevOps users who prefer to use the browser view for creating pull requests, we&#8217;ve added a secondary link to help maintain your workflow.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/open-pr-in-browser.png\"><img decoding=\"async\" class=\"wp-image-247095 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/open-pr-in-browser.png\" alt=\"Image open pr in browser\" width=\"554\" height=\"484\" \/><\/a><\/p>\n<h2>Event Handler Leaks insights<\/h2>\n<p>Finding memory leaks is one of the more challenging parts of developing your app. Now, the Managed Memory Insights tab can detect &#8220;Event Handler Leaks,&#8221; which can happen when one object subscribes to another object&#8217;s events. If the event publisher lives longer than the event subscriber, the subscriber remains in memory, even when there are no other references to it. This can cause memory leaks and the application will use more memory over time without releasing unused memory properly.<a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/event-handler-leaks.png\"><img decoding=\"async\" class=\"size-full wp-image-247096 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/event-handler-leaks.png\" alt=\"Image event handler leaks\" width=\"1100\" height=\"619\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/event-handler-leaks.png 1100w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/event-handler-leaks-300x169.png 300w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/event-handler-leaks-1024x576.png 1024w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/event-handler-leaks-768x432.png 768w\" sizes=\"(max-width: 1100px) 100vw, 1100px\" \/><\/a><\/p>\n<h2>Instrumentation tool &#8220;Start with collection pause&#8221; option<\/h2>\n<p>The Instrumentation tool now has a &#8220;start-pause&#8221; option for profiling applications. This lets you start the app under the profiler&#8217;s control without immediately collecting data. You can resume data collection later when needed by hitting the record button. This is useful, especially in gaming, where you can get into the game before data collection starts. The feature is compatible with both native and managed projects.<a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/start-with-collection-pause.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-247097\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/start-with-collection-pause.png\" alt=\"Image start with collection pause\" width=\"1100\" height=\"488\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/start-with-collection-pause.png 1100w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/start-with-collection-pause-300x133.png 300w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/start-with-collection-pause-1024x454.png 1024w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/start-with-collection-pause-768x341.png 768w\" sizes=\"(max-width: 1100px) 100vw, 1100px\" \/><\/a><\/p>\n<h2>Switch between single and multiple rows in the document well<\/h2>\n<p>You can now quickly switch between single and multiple tab rows in Visual Studio&#8217;s document well by scrolling the mouse wheel up or down. The first time you open more tabs in Visual Studio than can fit in a single row in the document well, you&#8217;ll see a tip letting you know of this new feature.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/single-vs-multiple-tab-rows.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-247098\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/single-vs-multiple-tab-rows.png\" alt=\"Image single vs multiple tab rows\" width=\"618\" height=\"188\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/single-vs-multiple-tab-rows.png 618w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/single-vs-multiple-tab-rows-300x91.png 300w\" sizes=\"(max-width: 618px) 100vw, 618px\" \/><\/a><\/p>\n<p>Scrolling down on the mouse wheel while hovering over the tabs in the document well will shift your view to show multiple tab rows. Conversely, scrolling up on the mouse wheel will collapse the view down to a single tab row.<\/p>\n<h2>Non-modal Debug Visualizers<\/h2>\n<p>Debug Visualizers are now non-modal, allowing concurrent interaction with the Editor while the visualizer window is active. It is possible to have multiple types of visualizers open simultaneously, and you have the flexibility to choose whether to float or dock your visualizer window.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/01\/non_modal_visualizers-1.gif\"><img decoding=\"async\" class=\"aligncenter wp-image-246910\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/01\/non_modal_visualizers-1.gif\" alt=\"Image non modal visualizers\" width=\"1243\" height=\"772\" \/><\/a><\/p>\n<h2>Responsive Local History labels in the Git Repository window<\/h2>\n<p>Your branch and tag labels now resize responsively to make it easier to see which branches you&#8217;re looking at in the Git graph.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/git-ref-labels.gif\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-247100\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/git-ref-labels.gif\" alt=\"Image git ref labels\" width=\"384\" height=\"226\" \/><\/a><\/p>\n<h2>Multi-project configuration<\/h2>\n<p>Now, you can easily set up and save profiles for launching specific projects within a multi-project solution for streamlined debugging. Simplify working with complex solutions, enhance debugging efficiency, and effortlessly share configurations with your team.<\/p>\n<p><div style=\"width: 1620px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-247038-2\" width=\"1620\" height=\"1080\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/MultiProjectConfig.mp4?_=2\" \/><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/MultiProjectConfig.mp4\">https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/MultiProjectConfig.mp4<\/a><\/video><\/div><\/p>\n<p>&nbsp;<\/p>\n<h2>Multi-folder open support<\/h2>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/multi-folder-open.gif\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-247102\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/multi-folder-open.gif\" alt=\"Image multi folder open\" width=\"624\" height=\"404\" \/><\/a><\/p>\n<h2>Auto Surround with Quotes or Brackets<\/h2>\n<p>You can now easily surround a selection with bracket delimiters including: &#8220;double quotes&#8221;, &#8216;single quotes&#8217;, and (parentheses).<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/12\/Picture11.gif\"><img decoding=\"async\" class=\"aligncenter wp-image-246316\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/12\/Picture11.gif\" alt=\"New surround with brackets functionality\" width=\"1151\" height=\"471\" \/><\/a><\/p>\n<p>To enable or disable this feature, go to <strong>Tools <\/strong>&gt; <strong>Options <\/strong>&gt; <strong>Text Editor <\/strong>and check the &#8220;Automatically surround selections when typing quotes or brackets&#8221; option.<\/p>\n<h2>C++ and Game Dev<\/h2>\n<h2>Streamlined Unreal Engine Blueprints references<\/h2>\n<p>Available gradually over the upcoming weeks, you will no longer need the Visual Studio Unreal Engine plugin to see Blueprint References, and Visual Studio will now display CodeLens hints with reduced latency and use fewer machine resources. Additionally, we have added support for including usages of UFUNCTIONs outside of the class hierarchy directly in the CodeLens results. We will cache your results from previous scans and only process new or modified assets since the last scan.<\/p>\n<h2>Improved IntelliSense for Unreal Engine projects<\/h2>\n<p><span class=\"TextRun SCXW194088064 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW194088064 BCX8\">Unreal Engine uses its own reflection mechanism to connect<\/span><span class=\"NormalTextRun SCXW194088064 BCX8\"> the worlds of<\/span><span class=\"NormalTextRun SCXW194088064 BCX8\"> C++ and Blueprints<\/span><span class=\"NormalTextRun SCXW194088064 BCX8\">. <\/span><span class=\"NormalTextRun SCXW194088064 BCX8\">This is achieved through custom preprocessing of C++ sources with the Unreal Header Tool (UHT) and injection through the regular C++ preprocessor.<\/span><span class=\"NormalTextRun SCXW194088064 BCX8\"> We have improved the handling of Unreal Engine IntelliSense by ensuring consistency and accuracy. IntelliSense will now refresh more readily for UHT generated files, reducing the likelihood of displaying unwarranted errors.<\/span><\/span><span class=\"EOP SCXW194088064 BCX8\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<h2>Remote Linux unit testing<\/h2>\n<p><span class=\"TextRun SCXW155048899 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW155048899 BCX8\">Based on <\/span><\/span><a class=\"Hyperlink SCXW155048899 BCX8\" href=\"https:\/\/developercommunity.visualstudio.com\/t\/ctest-support-for-remote-linux-targets\/431771\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Underlined SCXW155048899 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW155048899 BCX8\" data-ccp-charstyle=\"Hyperlink\">your feedback<\/span><\/span><\/a><span class=\"TextRun SCXW155048899 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW155048899 BCX8\"> we have enabled running unit tests for remote Linux scenarios. Try it out with your C++ projects<\/span><span class=\"NormalTextRun SCXW155048899 BCX8\"> that target <\/span><span class=\"NormalTextRun SCXW155048899 BCX8\">Linux on WSL or remote systems in the Test Explorer. Learn more about how the <\/span><\/span><a class=\"Hyperlink SCXW155048899 BCX8\" href=\"https:\/\/devblogs.microsoft.com\/cppblog\/azure-networking-team-reaches-peak-productivity-with-visual-studios-new-remote-linux-capabilities-and-improvements\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Underlined SCXW155048899 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW155048899 BCX8\" data-ccp-charstyle=\"Hyperlink\">Azure Networking Team has used remote Linux in Visual Studio<\/span><\/span><\/a><span class=\"TextRun Underlined SCXW155048899 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW155048899 BCX8\" data-ccp-charstyle=\"Hyperlink\">,<\/span><\/span><span class=\"TextRun SCXW155048899 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW155048899 BCX8\"> including remote unit testing.<\/span><\/span><span class=\"EOP SCXW155048899 BCX8\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/remote-linux-testing.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-247113\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/remote-linux-testing.png\" alt=\"Image remote linux testing\" width=\"624\" height=\"332\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/remote-linux-testing.png 624w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/remote-linux-testing-300x160.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/a><\/p>\n<h2>Specify custom CMake executable<\/h2>\n<p>Visual Studio ships with CMake bundled when you download the Desktop Development with C++ workload. However, you can now specify your own custom CMake executable on your machine if desired.\u00a0 Navigate to <strong>Tools<\/strong> &gt; <strong>Options<\/strong> and select <strong>CMake &gt; General.<\/strong> From here, you can check <strong>Enable custom CMake executable<\/strong> and specify the directory path of your CMake executable you wish to use.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/custom-cmake-exec.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-247114\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/custom-cmake-exec.png\" alt=\"Image custom cmake exec\" width=\"624\" height=\"412\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/custom-cmake-exec.png 624w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/custom-cmake-exec-300x198.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/a><\/p>\n<h2>C++ Memory Layout Visualization<\/h2>\n<p>Based on <a href=\"https:\/\/developercommunity.visualstudio.com\/t\/Add-tools-to-display-c-class-memory-la\/392536?q=memory+layout\">your feedback<\/a> we have added the<strong> Memory Layout<\/strong> feature. This feature enables visualization of the memory arrangements for your classes, structs, and unions directly within your editor, removing the need for compilation to view these layouts. When you hover over your types, a \u201cMemory Layout\u201d link will appear within the Quick Info. Clicking this link will open a dedicated window displaying the memory layout of the selected type. Furthermore, hovering over individual data types within this window will provide detailed information about their size and offset within the type.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/01\/a-gif-displaying-an-example-of-memory-layout.gif\"><img decoding=\"async\" class=\"aligncenter wp-image-246882\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/01\/a-gif-displaying-an-example-of-memory-layout.gif\" alt=\"A GIF displaying an example of Memory Layout\" width=\"774\" height=\"391\" \/><\/a><\/p>\n<h2>#include Diagnostics<\/h2>\n<p>Visual Studio now introduces <strong>#include Diagnostics<\/strong>, which provides a detailed analysis of your #include directives by displaying their references and build time. Once you turn on this feature, the number of references will be displayed in CodeLens. From there, you can easily navigate to the list of references and locate each reference. To view the build time of your #include directives next to their references, you will need to run Build Insights by navigating to <strong>Build<\/strong> &gt; <strong>Run Build Insights<\/strong>.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/include-diagnostics.gif\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-247115\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/include-diagnostics.gif\" alt=\"Image include diagnostics\" width=\"649\" height=\"304\" \/><\/a><\/p>\n<h2><strong>.NET\/C#<\/strong><\/h2>\n<h2>Automatic Deoptimization<\/h2>\n<p>With .NET 8, the Debugger now automatically optimizes release code and external code while debugging. When you set breakpoints and go through your code step by step, only the parts you stop at will be optimized, keeping the rest of your application running smoothly. To use this feature, you just need to turn off the &#8220;Just My Code&#8221; option in the debugger settings. This improvement brings benefits like fewer errors in the locals, watch, and immediate windows, and less unexpected code jumps when you&#8217;re debugging your application.<\/p>\n<p><div style=\"width: 1740px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-247038-3\" width=\"1740\" height=\"1080\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/17.9_P2_Deoptimization-2.mp4?_=3\" \/><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/17.9_P2_Deoptimization-2.mp4\">https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/17.9_P2_Deoptimization-2.mp4<\/a><\/video><\/div><\/p>\n<p>&nbsp;<\/p>\n<h2>Razor Snippets<\/h2>\n<p>HTML snippets are now available in Razor (.razor) files, making it easier and faster to write out common, repeating code patterns.\u00a0 To insert a snippet, start typing a common HTML tag (i.e. &lt;table&gt;) and select one of the dashed-box options from the resulting dropdown.<\/p>\n<h2>Multi-TFM Support for Razor Files<\/h2>\n<p>Multi-targeting framework support (TFM) is now available for Razor files. This allows you to include code that targets a particular framework and filter between code that targets each framework using the dropdown header above the editor window.\u00a0 You can also use the navigation bar drop downs to quickly navigate to different classes and members in the Razor file.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/multitfm.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-245935\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/multitfm.png\" alt=\"Blazor file with multi tfm intellisense support\" width=\"624\" height=\"254\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/multitfm.png 624w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/multitfm-300x122.png 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/a><\/p>\n<h2>Blazor Scaffolding for .NET 8 Projects<\/h2>\n<p>We have added support to scaffold views for Blazor projects, including CRUD (Create-Read-Update-Delete) using Entity Framework. After adding a model class to a Blazor project, you can get started with scaffolding by right clicking on the project in the Solution Explorer and selecting <strong>Add <\/strong>&gt;\u00a0 <strong>New Scaffolded Item<\/strong>. In the dialog that appears the new scaffolders are in the node under Common &gt; Razor Component.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffolding.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-245938\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffolding.png\" alt=\"New blazor scaffolding wizard\" width=\"480\" height=\"332\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffolding.png 480w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffolding-300x208.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>If you select the option Razor Components using Entity Framework (CRUD), you will get another dialog prompting for the details of what should be scaffolded.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffoldingcrud.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-245937\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffoldingcrud.png\" alt=\"CRUD specific scaffolding UI\" width=\"480\" height=\"214\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffoldingcrud.png 480w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffoldingcrud-300x134.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Here you select your model class and the DbContext that should be used. You can also create a new DbContext if needed. After completing this process files will be added to your project to enable the CRUD operations on the model class selected.<\/p>\n<p>The UI which is generated from the model provided looks like this:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffolding3.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-245936\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffolding3.jpg\" alt=\"Screenshot of the newly scaffolded UI\" width=\"480\" height=\"230\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffolding3.jpg 480w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2023\/11\/blazorscaffolding3-300x144.jpg 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Some important notes on the code which is generated in your project.<\/p>\n<ul>\n<li>The scaffolded code uses the new static server-side rendering support in Blazor in .NET 8<\/li>\n<li>The generated components only work on the server &#8211; they aren&#8217;t supported with WebAssembly based rendering<\/li>\n<li>The generated code uses the new QuickGrid component in .NET 8 for the table, which supports, sorting, filtering, pagination, etc if you enable interactivity on the page<\/li>\n<\/ul>\n<h2>Live Property Explorer Support for.NET MAUI<\/h2>\n<p>Live Property Explorer, a powerful tool that enables more efficient development, is now supported with .NET MAUI. It enables you to inspect XAML properties while debugging, to be used in conjunction with XAML Live Preview and Live Visual Tree.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/lpe.png\"><img decoding=\"async\" class=\"aligncenter wp-image-247118\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/lpe.png\" alt=\"Image lpe\" width=\"1228\" height=\"552\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/lpe.png 1382w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/lpe-300x135.png 300w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/lpe-1024x460.png 1024w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/lpe-768x345.png 768w\" sizes=\"(max-width: 1228px) 100vw, 1228px\" \/><\/a>\nWith LPE, you can easily view and tweak the properties of your app controls at runtime, which is especially useful when you&#8217;re looking to debug issues, optimize performance, or investigate where a property is defined in.<\/p>\n<p>To access the Live Property Explorer: Start and debug your app. Then, navigate to <strong>Debug<\/strong> &gt; <strong>Windows <\/strong>&gt; <strong>Live Property Explorer<\/strong>. Once you&#8217;ve opened the Live Property Explorer, you can use it to explore and live edit properties in your .NET MAUI app. For more information, visit our <a href=\"https:\/\/learn.microsoft.com\/visualstudio\/xaml-tools\/inspect-xaml-properties-while-debugging\">docs.<\/a><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/lpe2.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-247119\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/lpe2.png\" alt=\"Navigating to turn on the live property explorer\" width=\"480\" height=\"270\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/lpe2.png 480w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2024\/02\/lpe2-300x169.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<h2>Ecosystem<\/h2>\n<h2>Extensibility<\/h2>\n<p>Many of our developers, including myself, enhance their Visual Studio environment by using custom extensions that provide targeted, specific, and often contextual functionality. However, it\u2019s not always easy to standardize extension use across teams, projects, installations, etc.\u00a0 We\u2019re happy to announce that starting in Visual Studio 2022 version 17.9, you can use your <a href=\"https:\/\/learn.microsoft.com\/en-us\/visualstudio\/install\/import-export-installation-configurations?view=vs-2022#vsconfig-file-format\">vsconfig files to include extension information<\/a>\u00a0alongside the component listing.\u00a0 Since *.vsconfig files are easy to pass around and share with others, it\u2019s now easier to share information about which extensions need to be installed. This\u00a0<a href=\"https:\/\/developercommunity.visualstudio.com\/t\/A-vsconfig-file-should-automatically-pr\/518364?q=vsconfig+\">capability to load extensions thru a vsconfig file was one of our top requested community features<\/a>, and we\u2019re very excited to finally start delivering on this vision.<\/p>\n<p>When the Visual Studio installer reads a vsconfig file, it will detect if any extensions are specified, and if so, it will load them within Visual Studio in a machine wide context, available for all users to use.\u00a0 Recall that *.vsconfig files work in a variety of common scenarios.\u00a0 For example, you can add a vsconfig file to your repo or solution, and when Visual Studio loads the solution it\u2019ll process the config file and prompt you to load any missing components or now extensions. You can use the installer and import a config file into an existing installation, or use it to initialize a new installation. You can programmatically modify an existing installation and pass in a vsconfig file to the installer or use it with winget configure.\u00a0 Lastly, you can create a layout using a vsconfig file and now you can instruct clients that install from that layout to respect the config file.<\/p>\n<p>In 17.9, we&#8217;re delivering the first iteration of this experience, but there are more features still under development. For example, we&#8217;re working on the ability to <a href=\"https:\/\/developercommunity.visualstudio.com\/t\/VS-solution-load-should-detect-and-promp\/10607414\">detect missing non-marketplace extensions in the config file during solution load<\/a>, <a href=\"https:\/\/developercommunity.visualstudio.com\/t\/Ability-to-export-non-marketplace-or-use\/10602937\">the ability to export extensions<\/a>, and the ability to load \u201ccomplex\u201d extensions. \u00a0We&#8217;ll soon start to work on streamlining the other common installer operations such as update.<\/p>\n<p>Please try this feature out and\u00a0<a href=\"https:\/\/developercommunity.visualstudio.com\/t\/A-vsconfig-file-should-automatically-pr\/518364?q=vsconfig+\">let us know what you think<\/a>!\u00a0Your feedback is valuable and helps us prioritize which important and useful functionality to deliver next.<\/p>\n<h2>Discover Visual Studio Subscriptions<\/h2>\n<p>Many Visual Studio Enterprise or Professional subscribers might not be aware that their subscription includes additional benefits beyond the IDE. To help you discover and activate your benefits, we have added a new diamond icon to the Visual Studio toolbar.<\/p>\n<p>Upon clicking the diamond, a window opens to highlight our most popular benefits. In addition, the diamond experience provides links to take you to your my.visualstudio.com portal where you can find additional offerings such as training resources, magazine subscriptions, in-depth support, and product downloads.\u00a0 For more details about the benefits included in your Visual Studio Subscription, please login to <a href=\"https:\/\/my.visualstudio.com\">My.VisualStudio.com.<\/a><\/p>\n<hr \/>\n<p>Share your feedback and stay connected with Visual Studio!<\/p>\n<p style=\"text-align: center;\"><iframe src=\"https:\/\/www.surveymonkey.com\/r\/DGYJ2LV\" width=\"760\" height=\"450\"><span data-mce-type=\"bookmark\" style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" class=\"mce_SELRES_start\"><\/span><\/iframe><\/p>\n<p>We appreciate the time you\u2019ve spent reporting issues\/suggestions and hope you continue to give us feedback when using Visual Studio on what you like and what we can improve. Your feedback is critical to help us make Visual Studio the best tool it can be! You can share feedback with us via <a href=\"https:\/\/developercommunity.visualstudio.com\/home%22%20\/t%20%22_blank\">Developer Community<\/a>: report any bugs or issues via <a href=\"https:\/\/learn.microsoft.com\/visualstudio\/ide\/how-to-report-a-problem-with-visual-studio?view=vs-2022\">report a problem<\/a> and <a href=\"https:\/\/developercommunity.microsoft.com\/VisualStudio\/suggest\">share your suggestions<\/a> for new features or improvements to existing ones.<\/p>\n<p>Stay connected with the Visual Studio team by following us on <a href=\"https:\/\/www.youtube.com\/@visualstudio\">YouTube<\/a>, <a href=\"https:\/\/twitter.com\/VisualStudio\">Twitter<\/a>, <a href=\"https:\/\/www.linkedin.com\/showcase\/microsoft-visual-studio\/\">LinkedIn<\/a>, <a href=\"https:\/\/www.twitch.tv\/visualstudio\">Twitch<\/a> and on <a href=\"https:\/\/learn.microsoft.com\/en-us\/visualstudio\/?view=vs-2022\">Microsoft Learn<\/a>.<\/p>\n<p>On behalf of the entire Visual Studio team, thank you for reading. Happy Coding!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Welcome to Visual Studio 2022 17.9! This release comes with more capabilities and improvements that enhance productivity for you and your team, such as AI-assistance and better extensibility. Plus, we&#8217;re always improving core productivity and performance! We\u2019ve included suggestions from you in the community and are publishing more about our backlogs in our release notes [&hellip;]<\/p>\n","protected":false},"author":1965,"featured_media":247323,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[155],"tags":[6921],"class_list":["post-247038","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-visual-studio","tag-release"],"acf":[],"blog_post_summary":"<p>Welcome to Visual Studio 2022 17.9! This release comes with more capabilities and improvements that enhance productivity for you and your team, such as AI-assistance and better extensibility. Plus, we&#8217;re always improving core productivity and performance! We\u2019ve included suggestions from you in the community and are publishing more about our backlogs in our release notes [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/247038","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/users\/1965"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/comments?post=247038"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/247038\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/media\/247323"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/media?parent=247038"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/categories?post=247038"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/tags?post=247038"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}