CINXE.COM
Visual Studio Blog
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" > <channel> <title>Visual Studio Blog</title> <atom:link href="https://devblogs.microsoft.com/visualstudio/feed/" rel="self" type="application/rss+xml" /> <link>https://devblogs.microsoft.com/visualstudio/</link> <description>The official source of product insight from the Visual Studio Engineering Team</description> <lastBuildDate>Tue, 18 Feb 2025 17:12:06 +0000</lastBuildDate> <language>en-US</language> <sy:updatePeriod> hourly </sy:updatePeriod> <sy:updateFrequency> 1 </sy:updateFrequency> <image> <url>https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2018/10/Microsoft-Favicon.png</url> <title>Visual Studio Blog</title> <link>https://devblogs.microsoft.com/visualstudio/</link> <width>32</width> <height>32</height> </image> <item> <title>VisualStudio.Extensibility: Tagger support and updates to settings</title> <link>https://devblogs.microsoft.com/visualstudio/visualstudio-extensibility-tagger-support-and-updates-to-settings/</link> <dc:creator><![CDATA[Tina Schrepfer (LI)]]></dc:creator> <pubDate>Tue, 18 Feb 2025 17:12:06 +0000</pubDate> <category><![CDATA[Extensibility]]></category> <category><![CDATA[Visual Studio]]></category> <category><![CDATA[visualstudio.extensibility]]></category> <category><![CDATA[vsix]]></category> <guid isPermaLink="false">https://devblogs.microsoft.com/visualstudio/?p=252396</guid> <description><![CDATA[<p>We continue to invest in the VisualStudio.Extensibility SDK to allow users like you to create extensions that run faster and smoother than ever before! VisualStudio.Extensibility helps you build extensions that run outside the main Visual Studio IDE process for improved performance, reliability, and installation without restarting Visual Studio. Additional benefits include a sleek and intuitive […]</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/visualstudio-extensibility-tagger-support-and-updates-to-settings/">VisualStudio.Extensibility: Tagger support and updates to settings</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></description> <content:encoded><![CDATA[<p>We continue to invest in the VisualStudio.Extensibility SDK to allow users like you to create extensions that run faster and smoother than ever before! VisualStudio.Extensibility helps you build extensions that run outside the main Visual Studio IDE process for improved performance, reliability, and installation without restarting Visual Studio. Additional benefits include a sleek and intuitive .NET 8-based API and comprehensive, well-maintained documentation to help you develop amazing extensions faster than ever before.</p> <p><div class="d-flex justify-content-left"><a class="cta_button_link btn-primary mb-24" href="https://aka.ms/VisualStudio.Extensibility" target="_blank">Get Started with VisualStudio.Extensibility</a></div></p> <p>For the latest up-to-date docs and installation instructions, visit <a href="https://aka.ms/VisualStudio.Extensibility">https://aka.ms/VisualStudio.Extensibility</a>. We encourage you to report bugs and suggest features via the <a href="https://aka.ms/VisualStudio.Extensibility/Issues">issue tracker</a> on our <a href="https://aka.ms/VisualStudio.Extensibility/Repo">GitHub repo</a>, where you can also find extension <a href="https://aka.ms/VisualStudio.Extensibility/Samples">samples</a> to help you get started.</p> <h1>What’s new for VisualStudio.Extensibility in 17.13?</h1> <p>Our 17.13 release of VisualStudio.Extensibility includes the following features:</p> <ul> <li>Enhanced editor extensibility through tagger support</li> <li>Expanded settings API to allow for observation of changed settings values</li> </ul> <p>Both sets of APIs are marked as experimental, which means that they are subject to change as we iterate on the design based on customer feedback. A core principle of VisualStudio.Extensibility is to provide intuitive APIs. As hard as we work to shape the API to be intuitive from inception, we understand that there are likely gaps we’re missing or assumptions we’re making that could be addressed over time. We therefore mark new APIs as experimental to allow customers to report such gaps so we can address them. To read more about our experimental API and breaking changes policy, please see <a href="https://github.com/microsoft/VSExtensibility/blob/main/docs/breaking_changes.md" \l "Guidance-and-Expectations-Around-Breaking-Changes">here</a>.</p> <h2>Taggers – the foundation of custom text decoration</h2> <p>A powerful editor is foundational to a developer’s daily workflow, providing the essential tools and features needed to write, debug, and maintain code efficiently. In Visual Studio, text decorators are one of the key differentiators that enhance this experience. These decorators, such as text colorization and CodeLens, offer contextual information to help developers understand and navigate their code more effectively. At the heart of these decorative features is the concept of taggers. Taggers are the mechanism to mark the text in the editor with hidden information, enabling the editor to adopt various text decorations later.</p> <p>For example, to provide a custom CodeLens, first we need to define where the CodeLens should show up. Is it CodeLens for a method or a class? Different languages have different syntax for how methods are defined, and some languages may not have classes at all. To know where the blocks of code that make sense for your custom CodeLens to show up, we first need to “tag” the text in the editor with additional information. In 17.12, we talked about how CodeLens can only be created for languages supported by default in Visual Studio, like .NET or C++. This is because the text is already tagged by our own language services to contain the metadata needed for CodeLens. In 17.13, we are providing the API to provide your own tags, so that you can add CodeLens to languages not supported by Visual Studio. The following example shows a snippet of how to define CodeLens tags for a markdown file.</p> <pre class="prettyprint language-txt"><code class="language-txt"> [VisualStudioContribution] internal class MarkdownCodeLensTaggerProvider : ExtensionPart, ITextViewTaggerProvider<CodeLensTag>, ITextViewChangedListener { private readonly object lockObject = new(); private readonly Dictionary<Uri, List<MarkdownCodeLensTagger>> taggers = new(); public TextViewExtensionConfiguration TextViewExtensionConfiguration => new() { AppliesTo = [DocumentFilter.FromDocumentType("vs-markdown")], }; public Task<TextViewTagger<CodeLensTag>> CreateTaggerAsync(ITextViewSnapshot textView, CancellationToken cancellationToken) { var tagger = new MarkdownCodeLensTagger(this, textView.Document.Uri); lock (this.lockObject) { if (!this.taggers.TryGetValue(textView.Document.Uri, out var taggers)) { taggers = new(); this.taggers[textView.Document.Uri] = taggers; } taggers.Add(tagger); } return Task.FromResult<TextViewTagger<CodeLensTag>>(tagger); } } </code></pre> <p>Of course, there’s a lot more that goes into creating taggers for markdown files, so to view the whole code sample, please see <a href="https://github.com/microsoft/VSExtensibility/tree/main/New_Extensibility_Model/Samples/TaggersSample">here</a>, or you can refer to our <a href="https://learn.microsoft.com/en-us/visualstudio/extensibility/visualstudio.extensibility/editor/walkthroughs/taggers">documentation</a> for more details. Try it out and customize the CodeLens experience in your extension even more!</p> <h2>Observing changes to settings values</h2> <p>Another addition we introduced in 17.13 is an enhancement to our settings API which allows extenders to get notified of changes to their settings values. Extenders can now generate settings observers to monitor changes and read their settings value snapshot.</p> <pre class="prettyprint language-txt"><code class="language-txt"> public MyToolWindow(MyCategoryObserver settingsObserver) { settingsObserver.Changed += this.SettingsObserver_ChangedAsync; } private async Task SettingsObserver_ChangedAsync(MyCategorySnapshot settingsSnapshot) { this.MySetting = settingsSnapshot.MySetting.ValueOrDefault(defaultValue: true); ... } </code></pre> <p>Please read our <a href="https://learn.microsoft.com/en-us/visualstudio/extensibility/visualstudio.extensibility/settings/settings#read-and-monitor-setting-values">documentation</a> for more detailed information and walk through our <a href="https://github.com/microsoft/VSExtensibility/tree/main/New_Extensibility_Model/Samples/SettingsSample">sample code</a> for full context.</p> <h1>We want to hear from you!</h1> <p>The time and effort you’ve spent reporting issues and sharing suggestions so far has been instrumental in shaping VisualStudio.Extensibility. We need your help as we continue to develop VisualStudio.Extensibility! Please try out the features and APIs announced and let us know what you think. Check out the <a href="https://aka.ms/VisualStudio.Extensibility">docs</a>, browse the <a href="https://aka.ms/VisualStudio.Extensibility/Samples">code samples</a>, and build your <a href="https://aka.ms/VisualStudio.Extensibility/FirstExtension">first extension</a>. You can send feedback and report issues through our <a href="https://github.com/microsoft/VSExtensibility/issues">issue tracker</a>.</p> <p>To request features, look at <a href="https://developercommunity.visualstudio.com/VisualStudio?q=%5BVisualStudio.Extensibility%5D&ftype=idea">Developer Community</a> to see if someone else made a similar request first. Create a new one if you can’t find a similar request. By checking for similar requests and upvoting and commenting on them, you help us better prioritize requests. Give VisualStudio.Extensibility a try today and share your thoughts with us!</p> <p>We appreciate the time you’ve 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> <p>Stay connected with the Visual Studio team by following us on <a href="https://www.youtube.com/@visualstudio" target="_blank" rel="noopener">YouTube</a>, <a href="https://twitter.com/VisualStudio" target="_blank" rel="noopener">Twitter</a>, <a href="https://www.linkedin.com/showcase/microsoft-visual-studio/" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.twitch.tv/visualstudio" target="_blank" rel="noopener">Twitch</a> and on <a href="https://learn.microsoft.com/en-us/visualstudio/?view=vs-2022" target="_blank" rel="noopener">Microsoft Learn</a>.</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/visualstudio-extensibility-tagger-support-and-updates-to-settings/">VisualStudio.Extensibility: Tagger support and updates to settings</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></content:encoded> </item> <item> <title>New restrictions on package loading</title> <link>https://devblogs.microsoft.com/visualstudio/new-restrictions-on-package-loading/</link> <dc:creator><![CDATA[Ryan Molden]]></dc:creator> <pubDate>Thu, 13 Feb 2025 22:45:37 +0000</pubDate> <category><![CDATA[Extensibility]]></category> <category><![CDATA[Visual Studio]]></category> <category><![CDATA[vsix]]></category> <category><![CDATA[vssdk]]></category> <guid isPermaLink="false">https://devblogs.microsoft.com/visualstudio/?p=252355</guid> <description><![CDATA[<p>As Visual Studio transitions its core packages and services to an async loading/retrieval model, we’ve identified bugs in both the initial async implementation and the existing synchronous package loading mechanism. While most of these bug fixes have been transparent to extenders, one requires attention due to changed constraints. This post highlights that change. Note that […]</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/new-restrictions-on-package-loading/">New restrictions on package loading</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></description> <content:encoded><![CDATA[<p>As Visual Studio transitions its core packages and services to an async loading/retrieval model, we’ve identified bugs in both the initial async implementation and the existing synchronous package loading mechanism.</p> <p>While most of these bug fixes have been transparent to extenders, one requires attention due to changed constraints. This post highlights that change. Note that this is only applicable to VSSDK based extensions and does not apply to VisualStudio.Extensiblity. For more information on the differences between extensibility models in Visual Studio, please refer to this documentation: <a href="https://learn.microsoft.com/en-us/visualstudio/extensibility/visualstudio.extensibility/extensibility-models?view=vs-2022">Choose the right Visual Studio extensibility model for you – Visual Studio (Windows) | Microsoft Learn</a></p> <h2>Summary</h2> <p>The change prevents cyclical package load requests to avoid a race condition where service requests, which should never return null, may occasionally do so. Cyclical package loads were never recommended, and any previous success was due to design decisions made over 25 years ago when Visual Studio was primarily single-threaded, and package loads had to occur on the UI thread.</p> <p>If you trigger a cyclical package load request it will fail with an HRESULT of 0x80049283 (VS_E_CYCLICPACKAGELOAD). For managed callers this would surface as a COMException with that HRESULT, for native callers the HRESULT would be returned directly.</p> <p>The change occurred in 17.12 Preview 2 (version 17.12.35309.182) and is present in all subsequent previews and releases.</p> <h2>Background Context</h2> <h3>Service Discovery 101</h3> <p>In Visual Studio, a service is tied to a package. When the service is requested, the package loads (if not already loaded) and registers a service factory (IServiceProvider) to retrieve the service instance.</p> <p>Typically, service factories are registered in the package’s Initialize(Async) method (or SetSite for native packages).</p> <p>The service retrieval path in Visual Studio works as follows:</p> <ol> <li>Caller A asks for Service B</li> <li>The service manager checks if a service factory for Service B is already registered. If so, it invokes the factory and returns the result.</li> <li>If no factory is registered, it checks if the package providing the service factory is loaded. If loaded, the request fails, as the service cannot be acquired.</li> <li>If the package is not loaded, it loads the package, expecting it to register the service factory, and checks again for registration.</li> <li>If no factory is registered, the request fails.</li> <li>If a factory is registered, it is invoked to retrieve the service instance.</li> </ol> <h3>The Problem</h3> <p>The issue arises when a recursive package load is required.</p> <p>So, for example, if Package A is currently loading and it calls GetService to get a service it itself provides. This creates a loop in the package load request chain as A is loading and has entered a code path, that to complete, must wait for A to finish loading.</p> <p>Another example would be if Package A is currently loading and calls GetService on a service that comes from Package B. If Package B, during its load, calls GetService on a service that comes from package A we again have a loop in the package load request chain.</p> <p>These loops can be arbitrarily long (i.e. Package A triggers Package B to load, which triggers package C to load, which triggers package D to load …. which triggers Package A to load).</p> <p>If a service being requested during a package load from a package that is currently loading then:</p> <ul> <li>If the package has registered the service factory before the request is made, the service manager invokes the factory and returns the service—this is the ideal path.</li> <li>If the package has not registered the service factory before the request is made, a problem occurs. When the service manager checks if the package is loaded, it detects the package is still loading (not fully loaded). If it blocks waiting for the package to finish loading, a deadlock occurs, as the package load waits for the service return, but that requires the package load to complete. If it ignores the loading state, it returns null, since the service factory hasn’t been registered yet.</li> </ul> <p>To make this work, the original design marked a package as “loaded” right before its Initialize/SetSite was called.</p> <p>This was a reasonable compromise in the context of the time, as all package loads were synchronous and occurred on the UI thread, eliminating concerns about concurrent load requests. It also allowed cycles to “work” if the service-providing package registered all its services before attempting to retrieve any services that could lead to a cycle.</p> <h2>So Why the Change?</h2> <p>The term “work” was used in quotes because, while it sometimes worked, it was unreliable. For it to work, all packages had to register their service factories before making requests that could introduce a cycle. This was unenforceable, error-prone, and led to issues where internal packages would re-query for services if the initial request returned null. It was also susceptible to failure from minor changes, like refactoring initialization code or altering the load order of packages, which could invert the request chain and break the cycle (or introduce another).</p> <p>Additionally, this approach only worked in a single-threaded loading model, which Visual Studio no longer uses.</p> <p>In a multi-threaded loading model, the likelihood of race conditions increases. If a package is marked as loaded before its SetSite/Initialize method is called, a request from another thread may consider the package already loaded and attempt to retrieve the service, racing with the original package’s service factory registration.</p> <p>To prevent null services from being returned due to this race condition, we must ensure that all loads, except the original request, block until the package initialization completes (until Initialize(Async)/SetSite returns). However, blocking on in-progress loads should only occur if the calling thread is independent of the original thread that initiated the load; otherwise, it could deadlock the entire process.</p> <h2>The Fix</h2> <p>To solve this problem, we rely on AsyncLazy to manage package loads. AsyncLazy uses AsyncLocal to detect re-entrant invocations. It can determine, from the context of any thread, if the caller is related to the original thread that invoked AsyncLazy’s value factory. If so, it throws an exception; if not, it blocks the caller until the original invocation completes.</p> <p>This behavior is exactly what we need, but it means cyclic load requests will now throw an exception, causing a failure. While this is unavoidable (and actually desirable), it represents a change in behavior. This approach ensures a package isn’t considered loaded until its Initialize(Async)/SetSite completes, eliminating the registration race condition, and properly handles concurrent load requests—blocking if unrelated to the original load, or failing otherwise.</p> <h2>Call to Action</h2> <p>This change is necessary to prevent a race condition, which arises from how Visual Studio services are discovered.</p> <h3>Ways to avoid cycles</h3> <p>Since cycles are no longer allowed, it’s important to avoid creating them. The good news is that changes made to address these issues will also work in older versions, as cycles were never a good idea. While race conditions still exist in older versions, these cannot be avoided without applying this fix more broadly, which would impact a larger user base.</p> <p>The most common mistake we observed was developers being too eager in Initialize(Async)/SetSite, often leading to cycles. Specifically, people would:</p> <ol> <li>Eagerly create service instances, which often required fetching other services.</li> <li>Eagerly create tool windows, which also required fetching services.</li> <li>Eagerly fetch services to store in backing fields, even if they weren’t used in Initialize(Async)/SetSite.</li> </ol> <p>Your Initialize(Async)/SetSite should do minimal work. You won’t know why your package was loaded, but if it was to retrieve a service or load a tool window, those actions will occur by a follow-up call after Initialize(Async)/SetSite completes.</p> <p>To avoid cycles, services can be retrieved “just in time” using Lazy<T> or AsyncLazy<T> outside of Initialize(Async)/SetSite. Similarly, while service factories should be registered eagerly, the actual service creation (which can involve fetching other services) happens only after the package is fully loaded, eliminating the cycle risk.</p> <p>Tool windows should also be created outside Initialize(Async)/SetSite, and any required services can be fetched at that point. An example of this pattern can be seen here: <a href="https://developercommunity.visualstudio.com/t/Upgrading-to-Visual-Studio-2022-17121/10797142">Upgrading to Visual Studio 2022 17.12.1 displays error Exception from HRESULT: 0x80049283 – Developer Community</a> In this case the extension is eagerly creating its toolwindow inside its InitializeAsync, this is unnecessary. A separate call will be made by the environment when your toolwindow is needed.</p> <h2>Customer Value</h2> <p>This change was made to reduce instances of services returning null when they should never do so. Such failures are problematic because if the caller doesn’t null-check the result, it could crash Visual Studio. If they do check for null, they must handle the missing service appropriately. Most users opted to disable functionality that depended on the missing service, leading to inconsistent behavior—where Visual Studio sometimes appeared to lack features that worked in previous sessions, even though the code hadn’t changed.</p> <p>For extenders, this change adds some extra work, but it also eliminates the uncertainty around services occasionally returning null. They can now consistently treat null as either a fatal error or an indication that a feature is unavailable, rather than a strange, self-correcting issue that might resolve with a retry.</p> <h2>Conclusion + Thanks</h2> <p>We understand that changes to “working” code are generally undesirable. Initially, we didn’t expect many people to be affected, but after issues were reported by two internal teams and one external team, we realized a fix we anticipated would be non-disruptive was, in fact, impacting extenders.</p> <p>This post was directly motivated by user feedback, which alerted us to the issue, rather than users silently adjusting their code without fully understanding the cause, for that we are grateful.</p> <p>We appreciate the time you’ve 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> <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> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/new-restrictions-on-package-loading/">New restrictions on package loading</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></content:encoded> </item> <item> <title>First preview of Visual Studio 2022 v17.14</title> <link>https://devblogs.microsoft.com/visualstudio/first-preview-of-visual-studio-2022-v17-14/</link> <dc:creator><![CDATA[Mads Kristensen]]></dc:creator> <pubDate>Wed, 12 Feb 2025 14:45:47 +0000</pubDate> <category><![CDATA[Artificial Intelligence]]></category> <category><![CDATA[GitHub Copilot]]></category> <category><![CDATA[Reliability]]></category> <category><![CDATA[Visual Studio]]></category> <category><![CDATA[Preview]]></category> <category><![CDATA[security]]></category> <guid isPermaLink="false">https://devblogs.microsoft.com/visualstudio/?p=252341</guid> <description><![CDATA[<p>We are pleased to announce the release of Visual Studio 2022 v17.14 Preview 1, marking the initial preview of our next update to Visual Studio. This update prioritizes delivering exceptional developer experiences, with an emphasis on stability and security, as well as AI enhancements. Download the preview and see the full list of enhancements in […]</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/first-preview-of-visual-studio-2022-v17-14/">First preview of Visual Studio 2022 v17.14</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></description> <content:encoded><![CDATA[<p>We are pleased to announce the release of Visual Studio 2022 v17.14 Preview 1, marking the initial preview of our next update to Visual Studio. This update prioritizes delivering exceptional developer experiences, with an emphasis on <strong>stability and security</strong>, as well as <strong>AI enhancements.</strong> <a href="https://visualstudio.microsoft.com/vs/preview/">Download the preview</a> and see the full list of enhancements in the <a href="https://learn.microsoft.com/visualstudio/releases/2022/release-notes-preview">release notes</a>.</p> <p><img fetchpriority="high" decoding="async" class="alignnone wp-image-252342" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/a-close-up-of-a-purple-band-description-automatic.png" alt="abstract image of Visual Studio" width="624" height="256" srcset="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/a-close-up-of-a-purple-band-description-automatic.png 624w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/a-close-up-of-a-purple-band-description-automatic-300x123.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></p> <h2>Stability & security</h2> <p>In this release, we’re focusing on bug fixes that help make Visual Studio more stable and secure. This is something we do from time to time. Our goal is to ensure that developers can work in a reliable and secure environment without disruptions. By addressing critical issues and enhancing overall performance, we aim to provide a seamless development experience. Our commitment to stability and security means rigorous testing and quality assurance processes are in place, ensuring that every aspect of the IDE functions optimally.</p> <h2>AI improvements</h2> <p>Visual Studio 2022 v17.14 includes AI features that aim to improve developer productivity by automating routine tasks, providing code suggestions, and enhancing coding efficiency. The platform offers AI-assisted code completion, refactoring tools, and personalized insights, allowing developers to write more efficient code and focus on complex aspects of their projects, potentially speeding up development cycles.</p> <p><div class="d-flex justify-content-left"><a class="cta_button_link btn-primary mb-24" href="https://visualstudio.microsoft.com/vs/preview/" target="_blank">Download Visual Studio Preview</a></div></p> <p>We hope you enjoy this preview of Visual Studio, and we look forward to hearing what you think. You can share feedback with us via <a href="https://developercommunity.visualstudio.com/home">Developer Community</a>, by reporting 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> <p>You can <a href="https://visualstudio.microsoft.com/vs/preview/">download the preview</a> from our website or update it from within the IDE. Please note that you should not use this preview in production environments, and some extensions or workloads may not be compatible with it.</p> <p>Thank you for using Visual Studio and <strong>happy coding</strong>!</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/first-preview-of-visual-studio-2022-v17-14/">First preview of Visual Studio 2022 v17.14</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></content:encoded> </item> <item> <title>Visual Studio 2022 v17.13 is Now Available!</title> <link>https://devblogs.microsoft.com/visualstudio/visual-studio-2022-v17-13-is-now-available/</link> <dc:creator><![CDATA[Mads Kristensen]]></dc:creator> <pubDate>Tue, 11 Feb 2025 18:34:45 +0000</pubDate> <category><![CDATA[Accessibility]]></category> <category><![CDATA[Azure]]></category> <category><![CDATA[Data and Analytics]]></category> <category><![CDATA[Debug]]></category> <category><![CDATA[Extensibility]]></category> <category><![CDATA[GitHub Copilot]]></category> <category><![CDATA[performance]]></category> <category><![CDATA[Productivity]]></category> <category><![CDATA[Team and Development]]></category> <category><![CDATA[Visual Studio]]></category> <category><![CDATA[Aspire]]></category> <category><![CDATA[Debugging and Diagnostics]]></category> <category><![CDATA[Developer Productivity]]></category> <category><![CDATA[Docker]]></category> <category><![CDATA[Git]]></category> <category><![CDATA[ssdt]]></category> <category><![CDATA[UI Design]]></category> <guid isPermaLink="false">https://devblogs.microsoft.com/visualstudio/?p=252327</guid> <description><![CDATA[<p>We are excited to announce the availability of Visual Studio 2022 v17.13. This update focuses on stability and security, along with continuous improvements for all developers using Visual Studio. Based on your feature requests, several new tools and enhancements have been added to this release. This update includes improvements for developers, such as advanced debugging […]</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/visual-studio-2022-v17-13-is-now-available/">Visual Studio 2022 v17.13 is Now Available!</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></description> <content:encoded><![CDATA[<p>We are excited to announce the availability of Visual Studio 2022 v17.13. This update focuses on <strong>stability</strong> and <strong>security</strong>, along with <strong>continuous improvements</strong> for all developers using Visual Studio.</p> <p><img decoding="async" class="alignnone wp-image-252328" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252327-1.png" alt="Abstract Visual Studio image" width="1200" height="498" srcset="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252327-1.png 1200w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252327-1-300x125.png 300w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252327-1-1024x425.png 1024w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252327-1-768x319.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" /></p> <p>Based on your feature requests, several new tools and enhancements have been added to this release. This update includes improvements for developers, such as advanced debugging capabilities, efficient code management, and enhanced security features. These additions aim to simplify workflows and boost productivity.</p> <p><div class="d-flex justify-content-left"><a class="cta_button_link btn-primary mb-24" href="https://visualstudio.microsoft.com/downloads/" target="_blank">Download Visual Studio 2022 v17.13</a></div></p> <p>For detailed information on each new feature, check out the <a href="https://learn.microsoft.com/visualstudio/releases/2022/release-notes">release notes</a>. If you’re pressed for time, here are the key highlights.</p> <h2>Productivity</h2> <ul> <li><strong>Customize file encoding</strong>: Specify the default encoding for saving files in Visual Studio.</li> <li><strong>Reimagine the horizontal scrollbar</strong>: The horizontal scrollbar in the editor now repositions itself to always be accessible, even when space is limited.</li> <li><strong>Choose whether to indent word wrap</strong>: You can now specify whether lines that wrap in the editor should be indented.</li> <li><strong>Navigate to recent files in Code Search</strong>: In Code Search, you can now easily jump between your recent files.</li> <li><strong>Enhanced line & column navigation</strong>: Visual Studio now supports advanced line and column navigation in Code Search.</li> </ul> <h2>GitHub Copilot</h2> <ul> <li><strong>Meet GitHub Copilot Free</strong>: GitHub Copilot Free is now available, gives you 2,000 code completions and 50 chat requests per month at no cost—all seamlessly integrated into Visual Studio.</li> <li><strong>AI-enhanced Feature Search</strong>: You can now ask GitHub Copilot to get detailed responses for your queries.</li> <li><strong>Use GitHub Copilot Edits across files</strong>: Iterate across multiple files more efficiently.</li> <li><strong>GitHub Copilot shortcuts</strong>: New keyboard shortcuts for threads in GitHub Copilot Chat.</li> <li><strong>Slash command expansions</strong>: Enhance slash commands by expanding into natural language.</li> </ul> <h2>Debugging & diagnostics</h2> <ul> <li><strong>Highlight syntax with IEnumerable Visualizer</strong>: Enhanced editable expression with syntax highlighting is now available.</li> <li><strong>Craft complex LINQ queries</strong>: Enhanced editable expression with GitHub Copilot Inline Chat directly in the IEnumerable Visualizer.</li> <li><strong>Streamline debugging for native code</strong>: The Visual Studio profiler’s instrumentation tool now supports targeted instrumentation for native code.</li> <li><strong>Thread summaries in Parallel Stacks</strong>: Enhance the debugging process with AI thread summaries in Parallel Stacks.</li> <li><strong>Display unified async stacks in profiler</strong>: The Visual Studio profiler unifies async stacks for streamlined .NET profiling.</li> <li><strong>Use color-coded swim lanes for CPU profiling</strong>: The Visual Studio profiler enables multiprocess CPU analysis with color-coded graphs and filtering.</li> </ul> <h2>Git tooling</h2> <ul> <li><strong>Add comments on pull requests</strong>: Review pull requests in Visual Studio by adding new comments to the files on the checked-out branch.</li> <li><strong>Catch issues at commit time</strong>: Get GitHub Copilot-powered suggestions for your code changes to help you catch potential issues early and improve your code quality.</li> <li><strong>View and manage Git tags</strong>: Navigate and push Git tags seamlessly from Visual Studio.</li> </ul> <h2>IDE</h2> <ul> <li><strong>Preserve font preferences across themes</strong>: Changing themes will now preserve your font and font size preferences.</li> <li><strong>Onboard a GitHub account</strong>: Add GitHub accounts from the first launch wizard or the Visual Studio shell.</li> <li><strong>Manage multiple GitHub accounts</strong>: Add multiple GitHub accounts and set an active account to drive GitHub features like GitHub Copilot and version control.</li> <li><strong>Add a new markdown file</strong>: Adding a new markdown file just got easier with the new template available in the Add New Item dialog.</li> <li><strong>Check out the new features in the Teams Toolkit</strong>: Learn about the Teams Toolkit improvements in the new release.</li> </ul> <h2>Cloud</h2> <ul> <li><strong>Leverage .NET Aspire and Azure Functions</strong>: Azure Functions can now use .NET Aspire to integrate serverless technology into .NET Aspire.</li> <li><strong>Launch a new Docker configuration</strong>: Enable depends_on support with the DependencyAwareStart launch configuration option.</li> <li><strong>Add scale to Docker Compose</strong>: The scale property in Docker Compose is now supported.</li> </ul> <h2>Web</h2> <ul> <li><strong>Extract HTML to Razor component</strong>: Use a code action to easily extract HTML to a Razor component in Visual Studio.</li> <li><strong>Disable format on paste for Razor files</strong>: You can now disable the format on paste feature for Razor in Visual Studio.</li> </ul> <h2>Data</h2> <ul> <li><strong>Use SDK-style SQL projects in SSDT</strong>: You can now use the SDK-style project file format in your SQL Server Data Tools projects with enhanced SQL debugging and schema comparison capabilities.</li> </ul> <h2>Stay in touch</h2> <p>As you use Visual Studio, let us know what you love, what you like, and where you’d like us to improve. You can share feedback with us via <a href="https://developercommunity.visualstudio.com/home">Developer Community</a>: report any bugs or issues via <a href="https://docs.microsoft.com/visualstudio/ide/how-to-report-a-problem-with-visual-studio">report a problem</a> and <a href="https://developercommunity.visualstudio.com/report?space=8&entry=suggestion">share your suggestions</a> for new features or improvements to existing ones.</p> <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> <p>As always, we appreciate the time you’ve spent reporting issues and hope you continue to give us feedback on how we’re doing and what we can improve.</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/visual-studio-2022-v17-13-is-now-available/">Visual Studio 2022 v17.13 is Now Available!</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></content:encoded> </item> <item> <title>VisualStudio.Extensibility: Managing .NET runtime versions</title> <link>https://devblogs.microsoft.com/visualstudio/visualstudio-extensibility-managing-net-runtime-versions/</link> <dc:creator><![CDATA[Tina Schrepfer (LI)]]></dc:creator> <pubDate>Mon, 10 Feb 2025 16:17:53 +0000</pubDate> <category><![CDATA[Accessibility]]></category> <category><![CDATA[Extensibility]]></category> <category><![CDATA[Visual Studio]]></category> <category><![CDATA[.NET]]></category> <category><![CDATA[visualstudio.extensibility]]></category> <category><![CDATA[vsix]]></category> <guid isPermaLink="false">https://devblogs.microsoft.com/visualstudio/?p=252310</guid> <description><![CDATA[<p>We continue to invest in the VisualStudio.Extensibility SDK to allow developers like you to create extensions that run faster and smoother than ever before! VisualStudio.Extensibility helps you build extensions that run outside the main Visual Studio IDE process for improved performance and reliability, and that can be installed without the need to restart Visual Studio. […]</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/visualstudio-extensibility-managing-net-runtime-versions/">VisualStudio.Extensibility: Managing .NET runtime versions</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></description> <content:encoded><![CDATA[<p>We continue to invest in the VisualStudio.Extensibility SDK to allow developers like you to create extensions that run faster and smoother than ever before! VisualStudio.Extensibility helps you build extensions that run outside the main Visual Studio IDE process for improved performance and reliability, and that can be installed without the need to restart Visual Studio. Additional benefits include a sleek and intuitive .NET 8-based API and comprehensive, well-maintained documentation to help you develop amazing extensions faster than ever before.</p> <p><div class="d-flex justify-content-left"><a class="cta_button_link btn-primary mb-24" href="https://aka.ms/visualstudio.extensibility" target="_blank">Get Started with VisualStudio.Extensibility</a></div></p> <p>In the recent releases of Visual Studio, we’ve focused on documenting features that are polished for GA, so we haven’t blogged often about features available only in the preview channel. However, some features are worthy of early announcement to gather feedback so we can iterate earlier and make the experience better. Today, we’re writing about one such feature – managing the .NET runtime versions, which is available for you to try out in 17.14 Preview 1.</p> <p>A key benefit of VisualStudio.Extensibility is that extensions can run out of process on .NET 8, giving you access to a modern, more performant runtime. However, .NET has some fundamental differences from .NET Framework (netfx): each version of the runtime can run side by side and each version of the runtime goes out of support faster than netfx. A new version of .NET comes out every year, with odd number releases receiving 18 months of support, and even number releases receiving 36 months (see <a href="https://dotnet.microsoft.com/en-us/platform/support/policy">here</a> for the official .NET support policy). Thus, for extensions running out of process on VisualStudio.Extensibility, we must roll forward our version of .NET every so often, even after Visual Studio 2022 is past active development and goes into servicing. To get more details on Visual Studio’s support policy, please see <a href="https://learn.microsoft.com/visualstudio/productinfo/vs-servicing">here</a>.</p> <p>In 17.14 preview 1, we are introducing the experience that extension developers and consumers can expect when .NET runtime versions roll forward. The following diagram provides a sample timeline of what you can expect for VisualStudio.Extensibility extensions in VS 2022 in the coming years with respect to .NET runtime versions:</p> <p><img decoding="async" class="alignnone wp-image-252312" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/a-line-of-information-on-a-white-background-ai-ge.png" alt="Timeline for VS .NET runtimes" width="1783" height="742" srcset="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/a-line-of-information-on-a-white-background-ai-ge.png 1783w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/a-line-of-information-on-a-white-background-ai-ge-300x125.png 300w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/a-line-of-information-on-a-white-background-ai-ge-1024x426.png 1024w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/a-line-of-information-on-a-white-background-ai-ge-768x320.png 768w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/a-line-of-information-on-a-white-background-ai-ge-1536x639.png 1536w" sizes="(max-width: 1783px) 100vw, 1783px" /></p> <p>Extension consumers should not expect major or intrusive changes to their workflow when .NET runtime versions are rolled forward. Visual Studio will continue to load their VisualStudio.Extensibility extensions, even if these extensions do not specify that they target the latest supported version of .NET. Let’s wind back time and suppose VisualStudio.Extensibility extensions started running on the .NET 6 runtime. With .NET 6 having just reached its end of life, Visual Studio will now load VisualStudio.Extensibility extensions on .NET 8 runtime, even if the extension did not specify that it supports .NET 8. The following screenshot displays the information (icon) displayed when Visual Studio loads an extension that does not specify it supports the installed .NET runtime. When .NET 8 reaches end-of-life, users can expect a similar transition from .NET 8 to .NET 10.</p> <p><img decoding="async" class="alignnone wp-image-252313" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-3.png" alt="Command sample with pop up saying what this is acceptable on" width="2170" height="160" srcset="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-3.png 2170w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-3-300x22.png 300w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-3-1024x76.png 1024w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-3-768x57.png 768w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-3-1536x113.png 1536w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-3-2048x151.png 2048w" sizes="(max-width: 2170px) 100vw, 2170px" /></p> <p>For extension developers, you will have an opportunity to try loading your extensions in the new runtime version before the current runtime goes out of support. The following screenshot displays the new F5 debug experience when a new .NET runtime version is available.</p> <p><img decoding="async" class="alignnone wp-image-252314" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-4.png" alt="Dropdown showing options for runtime with new runtime highlighted" width="1301" height="380" srcset="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-4.png 1301w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-4-300x88.png 300w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-4-1024x299.png 1024w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252310-4-768x224.png 768w" sizes="(max-width: 1301px) 100vw, 1301px" /></p> <p>For more information on how to configure your extension to run against different runtimes, please see our official documentation on the subject <a href="https://learn.microsoft.com/en-us/visualstudio/extensibility/visualstudio.extensibility/dotnet-management-overview">here</a>.</p> <p>We understand that this model of updating the runtime even when Visual Studio 2022 goes out of active development deviates from how extensions are typically maintained in the in-proc, VSSDK model. For developers familiar with .NET, each version brings about breaking changes, although they are often scoped and announced well in advance. As with most .NET applications, the majority of extensions do not need to be rewritten or updated to target the latest .NET runtime version. If you as extension developers do not want to take on the additional burden of considering .NET runtime version compatibility, you can also choose to run their VisualStudio.Extensibility extension in the main devenv.exe process against the .NET Framework runtime. However, in doing so you would lose the ability to install your extensions without restarting Visual Studio, since the extensions are no longer run in isolation.</p> <p>This is a big shift, so we anticipate a lot of questions around this. We urge you to use our GitHub repo to file <a href="https://github.com/microsoft/VSExtensibility/issues">issues</a> or sound off your concerns in <a href="https://developercommunity.visualstudio.com/t/VisualStudioExtensibility-Feedback-on/10843113">this</a> Developer Community feedback ticket if you have questions or concerns regarding this change.</p> <h1>We want to hear from you!</h1> <p>The time and effort you’ve spent reporting issues and sharing suggestions so far has been instrumental in shaping VisualStudio.Extensibility. We need your help as we continue to develop VisualStudio.Extensibility! Please try out the features and APIs announced and let us know what you think. Check out the <a href="https://aka.ms/VisualStudio.Extensibility" target="_blank" rel="noopener">docs</a>, browse the <a href="https://aka.ms/VisualStudio.Extensibility/Samples" target="_blank" rel="noopener">code samples</a>, and build your <a href="https://aka.ms/VisualStudio.Extensibility/FirstExtension" target="_blank" rel="noopener">first extension</a>. You can send feedback and report issues through our <a href="https://github.com/microsoft/VSExtensibility/issues" target="_blank" rel="noopener">issue tracker</a>.</p> <p>To request features, look at <a href="https://developercommunity.visualstudio.com/VisualStudio?q=%5BVisualStudio.Extensibility%5D&ftype=idea" target="_blank" rel="noopener">Developer Community</a> to see if someone else made a similar request first. Create a new one if you can’t find a similar request. By checking for similar requests and upvoting and commenting on them, you help us better prioritize requests. Give VisualStudio.Extensibility a try today and share your thoughts with us!</p> <p>We appreciate the time you’ve 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" target="_blank" rel="noopener">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" target="_blank" rel="noopener">report a problem</a> and <a href="https://developercommunity.microsoft.com/VisualStudio/suggest" target="_blank" rel="noopener">share your suggestions</a> for new features or improvements to existing ones.</p> <p>Stay connected with the Visual Studio team by following us on <a href="https://www.youtube.com/@visualstudio" target="_blank" rel="noopener">YouTube</a>, <a href="https://twitter.com/VisualStudio" target="_blank" rel="noopener">Twitter</a>, <a href="https://www.linkedin.com/showcase/microsoft-visual-studio/" target="_blank" rel="noopener">LinkedIn</a>, <a href="https://www.twitch.tv/visualstudio" target="_blank" rel="noopener">Twitch</a> and on <a href="https://learn.microsoft.com/en-us/visualstudio/?view=vs-2022" target="_blank" rel="noopener">Microsoft Learn</a>.</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/visualstudio-extensibility-managing-net-runtime-versions/">VisualStudio.Extensibility: Managing .NET runtime versions</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></content:encoded> </item> <item> <title>HTTP File updates for Request Variables and more</title> <link>https://devblogs.microsoft.com/visualstudio/http-file-updates-for-request-variables-and-more/</link> <dc:creator><![CDATA[Sayed Ibrahim Hashimi]]></dc:creator> <pubDate>Thu, 06 Feb 2025 15:00:26 +0000</pubDate> <category><![CDATA[Visual Studio]]></category> <guid isPermaLink="false">https://devblogs.microsoft.com/visualstudio/?p=252272</guid> <description><![CDATA[<p>Many users have requested adding support for Request Variables in HTTP files in Visual Studio. With Request Variables, you can send an HTTP request and then use data from the response, or request, in any subsequent request that is sent from the HTTP file. We have also added support for a shared environment, $shared, which […]</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/http-file-updates-for-request-variables-and-more/">HTTP File updates for Request Variables and more</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></description> <content:encoded><![CDATA[<p>Many users have requested adding support for Request Variables in <a href="https://learn.microsoft.com/en-us/aspnet/core/test/http-files?view=aspnetcore-9.0">HTTP files</a> in Visual Studio. With Request Variables, you can send an HTTP request and then use data from the response, or request, in any subsequent request that is sent from the HTTP file. We have also added support for a shared environment, $shared, which enables you to share variables across different environments. In this post we will outline the new support which has been added for Request Variables and more. All the features listed in this post are included in Visual Studio 2022 17.12+.</p> <h2>Request Variables</h2> <p>When working with APIs it’s common to get a value from an endpoint and then use that value in a subsequent request. This can be achieved by using Request Variables. We have <a href="https://learn.microsoft.com/aspnet/core/test/http-files?view=aspnetcore-9.0#request-variables">docs for Request Variables</a>, but we will go over everything here as well. One of the more common scenarios for using Request Variables is when you call into an endpoint to authenticate to the APIs and get a token back which can be used for future requests. The sample request below is for David Fowler’s <a href="https://github.com/davidfowl/TodoApp">TodoApi sample</a>. The API has an endpoint where you can create a new user by supplying the username and password. This is the endpoint that we are making a request to.</p> <pre class="prettyprint language-default"><code class="language-default">@username = bloguser # login and save the response as "login" # @name login POST {{TodoApi_HostAddress}}/users/token Content-Type: application/json { "username": "{{username}}", "password": "{{password}}" } ###</code></pre> <p>In this case the username is defined in the HTTP file, but the password is stored securely using <a href="https://learn.microsoft.com/en-us/aspnet/core/test/http-files?view=aspnetcore-9.0#environment-files">HTTP Environments</a>. The request below is to the <em>/users/token</em> endpoint, and we pass in the username and password as a part of the body of the HTTP request. The special sauce that makes this a Request Variable, sometimes referred to as Named Request, is the line immediately above the comment.</p> <pre class="prettyprint language-default"><code class="language-default"># @name login</code></pre> <p>After sending this request in Visual Studio you can then get values from the response, or the request. In snippet below, you can see how we use the login Request Variable to access the token which was returned as a part of the response when it was submitted. The login response body contained a single value, token. Now that we have logged in, we can create a TODO item with the request below.</p> <pre class="prettyprint language-default"><code class="language-default"># Create a TODO item # @name todo1 POST {{TodoApi_HostAddress}}/todos Authorization: Bearer {{login.response.body.$.token}} Content-Type: application/json { "title": "Write blog post" } ### </code></pre> <p>In this request we extract the token value and use it to specify the value for the Authorization header. The syntax <em>{{login.response.body.$.token}}</em>. Let’s take a closer look at the syntax.</p> <pre class="prettyprint language-default"><code class="language-default">{{login.response.body.$.token}}</code></pre> <p>Below is a table summarizing the syntax for using values from Request Variables.</p> <table> <tbody> <tr> <td>Element</td> <td>Description</td> </tr> <tr> <td>requestVarName (<em>login in this case</em>)</td> <td>Request Variable which is being referenced.</td> </tr> <tr> <td>response|request</td> <td>Whether the value will be extracted from the response or the request.</td> </tr> <tr> <td>body|headers</td> <td>Whether the value will be extracted from the headers or body of the request or response (as specified in response|request).</td> </tr> <tr> <td>*|JSONPath|XPath|Header</td> <td>The expression that will be evaluated to extract the result.</p> <p>For a request returning a JSON body, use a JSONPath expression.</p> <p>For a request returning an XML body, use XPath.</p> <p>* will return the entire result.</p> <p>* cannot be used when extracting from headers.</td> </tr> </tbody> </table> <p>For the sample request above, we are extracting the token from the response and passing it in as a header for the request to the <em>/todos</em> endpoint. After we send this request, the result that is returned is shown below.</p> <pre class="prettyprint language-default"><code class="language-default">{ "id": 36, "title": "Write blog post", "isComplete": false } </code></pre> <p>Now that we have created a TODO item, we can update that item with the request below. If you noticed the request above has declared a Request Variable named <em>todo1</em>, so we can refer to values from the response, or request, using that. Let’s update the title to add “ today” at the end of the current title. The request below will update the TODO item. We will use PUT since this is an update to an existing item.</p> <pre class="prettyprint language-default"><code class="language-default">PUT {{TodoApi_HostAddress}}/todos/{{todo1.response.body.$.id}} Authorization: Bearer {{login.response.body.$.token}} Content-Type: application/json { "id": {{todo1.response.body.$.id}}, "title": "{{todo1.response.body.$.title}} today", "isComplete": {{todo1.response.body.$.isComplete}} } ### </code></pre> <p>In this request we use data from the original todo1 request to populate the body of the PUT request. Notice that the title property appends “ today” to the end of the existing title. After sending this request, the result was.</p> <pre class="prettyprint language-default"><code class="language-default">{ "id": 36, "title": "Write blog post today", "isComplete": false } </code></pre> <p>Here you can see that the title of the blog post was successfully updated. In these examples I have shown working with “flat” JSON results, but you can use any JSONPath expression to extract the data from the response, or request, body. If your endpoints are returning XML, use an XPath expression instead of JSONPath. Let’s move on to discuss the support for $shared.</p> <h2>$shared Environment</h2> <p>When working with <a href="https://learn.microsoft.com/en-us/aspnet/core/test/http-files?view=aspnetcore-9.0#environment-files">HTTP environments</a> you can define multiple different environments for your HTTP requests. For example, you may create a <em>dev</em> environment which refers to your API which is running locally and a <em>test</em> environment when you want to send request to a remote test environment. In these cases, you may want to declare a variable which is made available to all environments. This is exactly what the new <em>$shared</em> environment is for. HTTP environments are defined in a file named http-client.env.json, also http-client.env.json.user. If you create an environment named $shared, the variables will be made available in any environment. If a variable is declared in both $shared and standard environments, the value defined in the standard environment will win. Below is an example HTTP environment file containing a $shared environment and two standard environments.</p> <pre class="prettyprint language-default"><code class="language-default">{ "$shared": { "message": "Default msg from Shared", "username": "httpfile-user", "hosturl": "http://example.com/api/sample" }, "dev": { "hosturl": "http://localhost:5000/api/sample" }, "prod": { "message": "Message from prod environment" } } </code></pre> <p>This is a very basic HTTP environment file where we have a dev and prod environment defined in addition to the $shared. In the dev environment the value for hosturl has been customized to point to localhost and the prod environment has customized the message value. To show how this works we will use a third-party open-source website <a href="https://httpbin.org/">httpbin.org</a>. <a href="https://httpbin.org/">httpbin.org</a> is a great tool for API developers. We will create an HTTP file that makes request to <a href="https://httpbin.org/">httpbin.org</a> and have it return the values which were provided. We will use the /headers endpoint so that httpbin will echo the headers that we send to it. Below is the request that we will send.</p> <pre class="prettyprint language-default"><code class="language-default">GET https://httpbin.org/headers X-Message: {{message}} X-User: {{username}} X-Hosturl: {{hosturl}} ### </code></pre> <p>This request will use the variables defined in the HTTP environment in the request sent to httpbin.org. Reminder that you can select the environment in the dropdown in the top right of HTTP file editor. I’ve set the environment to dev, and the result from httpbin.org is shown below.</p> <pre class="prettyprint language-default"><code class="language-default">{ "headers": { "X-Hosturl": "http://localhost:5000/api/sample", "X-Message": "Default msg from Shared", "X-User": "httpfile-user" } } </code></pre> <p>In the response I removed some irrelevant headers. We can see that the values are being populated as expected. The value for <em>hosturl</em> is localhost as specified in the <em>dev</em> environment and the other values come from the <em>$shared</em>. When we switch the environment to prod and send the same request the response is as follows.</p> <pre class="prettyprint language-default"><code class="language-default">{ "headers": { "X-Hosturl": "http://example.com/api/sample", "X-Message": "Message from prod environment", "X-User": "httpfile-user" } } </code></pre> <p>The values for both <em>hosturl</em> and message have changed. The value for <em>hosturl</em> and username are coming from the $shared and <em>message</em> is coming from the value provided in the <em>prod</em> environment. If you send a request without an environment selected, values from $shared will be available. Now we have covered the new support for $shared, we will close out the blog post now.</p> <h2>Closing</h2> <p>In this post we have covered two new features for HTTP files, Request Variables and $shared in HTTP environments. With Request Variable support you can now create “chained” requests which take values from previous requests. This should enable you to exercise your APIs more in realistic ways than before. In addition, with $shared you can now share variables across environments making it easier for you to work with HTTP environments. If you are new to HTTP files take a look at <a href="https://learn.microsoft.com/aspnet/core/test/http-files?view=aspnetcore-9.0">the docs</a> for more info.</p> <p>The updates in this post were inspired by feedback from users like yourself. You can share feedback with us via <a href="https://developercommunity.visualstudio.com/home">Developer Community</a>: report any bugs or issues via <a href="https://docs.microsoft.com/visualstudio/ide/how-to-report-a-problem-with-visual-studio">report a problem</a> and share your <a href="https://developercommunity.visualstudio.com/report?space=8&entry=suggestion">suggestions for new features</a> or improvements to existing ones.</p> <p> </p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/http-file-updates-for-request-variables-and-more/">HTTP File updates for Request Variables and more</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></content:encoded> </item> <item> <title>Your fonts are now preserved when changing theme</title> <link>https://devblogs.microsoft.com/visualstudio/your-fonts-are-now-preserved-when-changing-theme/</link> <dc:creator><![CDATA[Mark Downie]]></dc:creator> <pubDate>Tue, 04 Feb 2025 13:00:18 +0000</pubDate> <category><![CDATA[Accessibility]]></category> <category><![CDATA[Visual Studio]]></category> <category><![CDATA[themes]]></category> <guid isPermaLink="false">https://devblogs.microsoft.com/visualstudio/?p=252255</guid> <description><![CDATA[<p>Do you find yourself adjusting your font settings every time you change themes in Visual Studio, We’ve made some changes that we think will help. The latest update in Visual Studio 2022 allows theme switching without affecting font settings. This feature maintains the selected font face and size regardless of the chosen theme, while font […]</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/your-fonts-are-now-preserved-when-changing-theme/">Your fonts are now preserved when changing theme</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></description> <content:encoded><![CDATA[<p>Do you find yourself adjusting your font settings every time you change themes in Visual Studio, We’ve made some changes that we think will help.</p> <p><img decoding="async" class="alignnone wp-image-252256" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252255-1.png" alt="Image of 2 themes where the fonts stay the same and adapt to the updated theme" width="500" height="281" srcset="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252255-1.png 500w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252255-1-300x169.png 300w" sizes="(max-width: 500px) 100vw, 500px" /></p> <p>The latest update in Visual Studio 2022 allows theme switching without affecting font settings. This feature maintains the selected font face and size regardless of the chosen theme, while font colors continue to adapt to the theme.</p> <h2>Seamless integration for a better user experience</h2> <p>This improvement is automatically enabled for all users, facilitating a consistent appearance in your coding environment. If you prefer the prior behavior, you can revert it easily. Just navigate to <strong>Tools > Manage Preview Features</strong> and locate the option <strong>Separate font settings from color theme selection</strong>. Unchecking this box will once again tie your font directly to the theme.</p> <h2>Why this feature matters</h2> <p>Font choices can be deeply personal, and we know that preserving the right font settings enhances productivity and allows you to focus more on just coding. This feature supports individual preferences for readability, accessibility, and aesthetics, making the development environment both comfortable and efficient.</p> <h2>Thank you for your feedback</h2> <p>This improvement comes from our invaluable <a href="https://developercommunity.microsoft.com/VisualStudio">developer feedback community</a>. Your suggestions make Visual Studio better with each update. Keep sharing your thoughts to help us enhance your coding experience.</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/your-fonts-are-now-preserved-when-changing-theme/">Your fonts are now preserved when changing theme</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></content:encoded> </item> <item> <title>Customize your AI-generated git commit messages</title> <link>https://devblogs.microsoft.com/visualstudio/customize-your-ai-generated-git-commit-messages/</link> <dc:creator><![CDATA[Jessie Houghton]]></dc:creator> <pubDate>Mon, 03 Feb 2025 16:00:58 +0000</pubDate> <category><![CDATA[Artificial Intelligence]]></category> <category><![CDATA[Git]]></category> <category><![CDATA[Visual Studio]]></category> <guid isPermaLink="false">https://devblogs.microsoft.com/visualstudio/?p=252252</guid> <description><![CDATA[<p>When it comes to collaborative software development, clear and effective communication is key. One area that often gets overlooked is the Git commit message. Poorly crafted commit messages can lead to confusion and inefficiencies within a team. That’s why we’ve built on the suggestions and feedback for the AI-generated commit messages, and now you can […]</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/customize-your-ai-generated-git-commit-messages/">Customize your AI-generated git commit messages</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></description> <content:encoded><![CDATA[<p>When it comes to collaborative software development, clear and effective communication is key. One area that often gets overlooked is the Git commit message. Poorly crafted <a id="post-252252-_Int_UngOjTcV"></a>commit messages can lead to confusion and inefficiencies within a team. That’s why we’ve built on the <a href="https://developercommunity.visualstudio.com/t/System-prompt-for-copilot-commit-message/10744657">suggestions and feedback for the AI-generated commit messages</a>, and now you can add custom prompt instructions!</p> <p><iframe title="YouTube video player" src="//www.youtube.com/embed/kd0ipsGxkt8?si=52KEmVvmC0uo6l_x" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> <p>This new capability enables you to tailor commit messages to fit your workflow and team’s standards seamlessly.<img decoding="async" class="alignnone wp-image-252253" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252252-1.png" alt="Screenshot showing how you can customize the format of your git commit messages" width="536" height="242" srcset="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252252-1.png 536w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/02/word-image-252252-1-300x135.png 300w" sizes="(max-width: 536px) 100vw, 536px" /></p> <p>This means you have control over the number of lines, the length of the lines, and even the style of the commit message. By specifying these details, you ensure that each commit message is meaningful <em>and</em> consistent with your team’s guidelines. Copilot understands terms like “subject,” “body,” and “footer.” Try out these examples as well:</p> <ul> <li>Use all lowercase</li> <li>Limit subject to 50 characters</li> <li>Limit body to 2 sentences</li> <li>Add a footer with three hash marks</li> <li>Follow Conventional Commits standard</li> <li>Use gitmoji</li> </ul> <p>To make use of this feature, simply navigate to <strong>Tools > Options > Copilot </strong>and input your desired parameters. This customization can significantly enhance your workflow by making commit messages more informative and standardized, ultimately leading to better collaboration and less confusion.</p> <h2>We value your feedback</h2> <p>We continuously strive to improve our tools based on your feedback. Your insights are invaluable in making Visual Studio an even better platform for developers around the world. We appreciate your ongoing support and encourage you to keep sharing your thoughts with us. Let us know what you think of this feature in this <a href="https://developercommunity.visualstudio.com/t/System-prompt-for-copilot-commit-message/10744657">suggestion ticket</a>.</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/customize-your-ai-generated-git-commit-messages/">Customize your AI-generated git commit messages</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></content:encoded> </item> <item> <title>Customizing collapsed text Indicators</title> <link>https://devblogs.microsoft.com/visualstudio/customizing-collapsed-text-indicators/</link> <dc:creator><![CDATA[Dominic Nahous]]></dc:creator> <pubDate>Thu, 30 Jan 2025 19:03:06 +0000</pubDate> <category><![CDATA[Accessibility]]></category> <category><![CDATA[Visual Studio]]></category> <category><![CDATA[UI Design]]></category> <guid isPermaLink="false">https://devblogs.microsoft.com/visualstudio/?p=252226</guid> <description><![CDATA[<p>Visual Studio 2022 introduces new options for customizing the collapsed text indicator, which helps in distinguishing between different sections of collapsed text in the editor. This aims to make the coding environment more intuitive and easier to use by providing additional customization for visual cues. Customizing your coding environment You can now personalize the color […]</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/customizing-collapsed-text-indicators/">Customizing collapsed text Indicators</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></description> <content:encoded><![CDATA[<p>Visual Studio 2022 introduces new options for customizing the collapsed text indicator, which helps in distinguishing between different sections of collapsed text in the editor. This aims to make the coding environment more intuitive and easier to use by providing additional customization for visual cues.</p> <p><img decoding="async" class="alignnone wp-image-252227" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/word-image-252226-1.png" alt="New collapsed text ellipses " width="562" height="240" srcset="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/word-image-252226-1.png 562w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/word-image-252226-1-300x128.png 300w" sizes="(max-width: 562px) 100vw, 562px" /></p> <h1>Customizing your coding environment</h1> <p>You can now personalize the color and background of the editor’s collapsed text indicator independently by setting custom colors for both the collapsed and expanded text indicators. This feature can be accessed via the <strong>Tools > Options > Environment > Fonts and Colors</strong> menu.</p> <p><img decoding="async" class="alignnone wp-image-252228" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/word-image-252226-2.png" alt="Customizing the collapsed text indicator to yellow and red" width="829" height="514" srcset="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/word-image-252226-2.png 829w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/word-image-252226-2-300x186.png 300w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/word-image-252226-2-768x476.png 768w" sizes="(max-width: 829px) 100vw, 829px" /></p> <p>The two new entries in the Test Editor settings list that control the color of the collapsed text indicator are:</p> <ul> <li>Collapsed Text Indicator (Collapsed)</li> <li>Collapsed Text Indicator (Expanded)</li> </ul> <p>In addition to customizing the collapsed and expanded colors separately, both the foreground and background colors for these indicators can be set independently from one another.</p> <h1>Conclusion</h1> <p>This new customization feature in Visual Studio 2022 enhances the coding environment by providing clear visual distinctions between different sections of code, making it easier to navigate and manage.</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/customizing-collapsed-text-indicators/">Customizing collapsed text Indicators</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></content:encoded> </item> <item> <title>Iterate across multiple files more efficiently with GitHub Copilot Edits</title> <link>https://devblogs.microsoft.com/visualstudio/iterate-across-multiple-files-more-efficiently-with-github-copilot-edits-preview/</link> <dc:creator><![CDATA[Aaron Yim]]></dc:creator> <pubDate>Tue, 28 Jan 2025 13:00:58 +0000</pubDate> <category><![CDATA[Visual Studio]]></category> <category><![CDATA[#Githubcopilot]]></category> <category><![CDATA[Conversational AI]]></category> <category><![CDATA[Copilot]]></category> <category><![CDATA[GitHub Copilot]]></category> <category><![CDATA[GitHub Copilot Chat]]></category> <category><![CDATA[Visual Studio 2022]]></category> <guid isPermaLink="false">https://devblogs.microsoft.com/visualstudio/?p=252165</guid> <description><![CDATA[<p>GitHub Copilot Edits in Visual Studio 2022 combines the conversational flow of chat and an inline review experience to help you iterate across your codebase with more control and efficiency. 💡 Here’s how Copilot Edits helps with iterating across multiple files: Preview with clarity: Review a clear summary that highlights affected files and proposed changes. […]</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/iterate-across-multiple-files-more-efficiently-with-github-copilot-edits-preview/">Iterate across multiple files more efficiently with GitHub Copilot Edits</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></description> <content:encoded><![CDATA[<p>GitHub Copilot Edits in Visual Studio 2022 combines the conversational flow of chat and an inline review experience to help you iterate across your codebase with more control and efficiency.</p> <p><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Here’s how Copilot Edits helps with iterating across multiple files:</p> <ul> <li><strong>Preview with clarity</strong>: Review a clear summary that highlights affected files and proposed changes.</li> <li><strong>Review with flow</strong>: View code diffs inline, directly in your editor. Either the TAB key to accept and Alt+Del keys to reject individual changes, or apply/dismiss all at once.</li> <li><strong>Iterate with confidence</strong>: Use checkpoints to revisit earlier iterations of a code file or try an alternative approach anytime for novel ideas.</li> </ul> <p><div style="width: 1920px;" class="wp-video"><!--[if lt IE 9]><script>document.createElement('video');</script><![endif]--> <video class="wp-video-shortcode" id="video-252165-1" width="1920" height="1080" preload="metadata" controls="controls"><source type="video/mp4" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/edits-final-_-jan-16-_-captions.mp4?_=1" /><a href="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/edits-final-_-jan-16-_-captions.mp4">https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/edits-final-_-jan-16-_-captions.mp4</a></video></div></p> <h3>Available in Visual Studio 2022 17.13, released February 11th.</h3> <ul> <li>Copilot Edits is available in versions 17.13 and later of Visual Studio 2022, released February 11th, 2025*.</li> <li>To use Copilot Edits, <a href="https://learn.microsoft.com/en-us/visualstudio/subscriptions/sign-in-github">sign in to Visual Studio 2022 with a GitHub account</a> that has access to Copilot, now available to all users with <a href="https://devblogs.microsoft.com/visualstudio/github-copilot-free-is-here-in-visual-studio/">Copilot Free</a>.</li> </ul> <p><div class="d-flex justify-content-left"><a class="cta_button_link btn-primary mb-24" href="#" target="_blank">Get Visual Studio 2022 17.13</a></div></p> <p>*Preview versions of this feature were released in 17.13 Preview, released December 18th, 2024.</p> <h3>Get started with GitHub Copilot Edits in Visual Studio</h3> <ol> <li><strong>Start an Edits thread: </strong>In the Copilot Chat window, click the Edits thread button (a “+” symbol with a pencil icon).</li> <li><strong>Describe your changes: </strong>Use natural language to describe your edits, just as you would in Copilot Chat.</li> <li><strong>Specify context or let Copilot discover: </strong>Copilot Edits will automatically consider your current file, open files, or search for related files across your codebase. You can also specify context using # commands like #errors, #file, #solution.</li> </ol> <p><a href="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/eshop_copilotedits_gettingstarted.png"><img decoding="async" class="alignnone wp-image-252191 size-full" src="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/eshop_copilotedits_gettingstarted.png" alt="Image eshop copilotedits gettingstarted" width="2102" height="1430" srcset="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/eshop_copilotedits_gettingstarted.png 2102w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/eshop_copilotedits_gettingstarted-300x204.png 300w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/eshop_copilotedits_gettingstarted-1024x697.png 1024w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/eshop_copilotedits_gettingstarted-768x522.png 768w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/eshop_copilotedits_gettingstarted-1536x1045.png 1536w, https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/eshop_copilotedits_gettingstarted-2048x1393.png 2048w" sizes="(max-width: 2102px) 100vw, 2102px" /></a></p> <p>For more details on how to use Copilot Edits, visit our <a href="https://learn.microsoft.com/en-us/visualstudio/ide/copilot-edits?view=vs-2022">documentation</a>.</p> <h3>Watch Copilot Edits in Action</h3> <p data-pm-slice="1 3 []">Want to see Copilot Edits in action? Check out our deep-dive walkthrough where we demonstrate how to:</p> <ul data-spread="false"> <li>Use Copilot Edits to make simple and complex edits with the power of natural language.</li> <li>Use Copilot Edits to check your work and fix an issue.</li> </ul> <p><iframe title="Multi-file Editing for GitHub Copilot in Visual Studio" width="500" height="281" src="https://www.youtube.com/embed/FdqxwrVSb3w?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p> <h3>We appreciate your feedback</h3> <p>Your feedback is invaluable for helping us improve Copilot Edits – please share with us on the <a href="https://developercommunity.visualstudio.com/t/GitHub-Copilot-Edits-now-available-in-17/10824251">Developer Community ticket</a> for Copilot Edits or the <a href="https://learn.microsoft.com/en-us/visualstudio/ide/how-to-report-a-problem-with-visual-studio?view=vs-2022">Send Feedback</a> button in Visual Studio.</p> <p>The post <a href="https://devblogs.microsoft.com/visualstudio/iterate-across-multiple-files-more-efficiently-with-github-copilot-edits-preview/">Iterate across multiple files more efficiently with GitHub Copilot Edits</a> appeared first on <a href="https://devblogs.microsoft.com/visualstudio">Visual Studio Blog</a>.</p> ]]></content:encoded> <enclosure url="https://devblogs.microsoft.com/visualstudio/wp-content/uploads/sites/4/2025/01/edits-final-_-jan-16-_-captions.mp4" length="13169216" type="video/mp4" /> </item> </channel> </rss>