If you’ve been following this blog, you know that in Visual Studio “15” we’ve been focused on making our developer tools easier to install, increasing performance, and enhancing developer productivity. We’ve been doing the same for extensions, and it’s time to talk a bit more about the implications of these changes both on extension authors and on customers who are using extensions.
A quick summary of the changes we’re making:
- We’ve added a performance monitoring system for extensions. Customers will now see a gold notification bar when an extension is slowing load time or typing speed;
- We now batch extension updates and installs to make it easier to install or update multiple extensions;
- We’ve made it possible for extensions to detect and install dependent components, now that the default installation footprint of Visual Studio is much smaller;
- We’ve made several performance improvements that have an impact on extension authors, such as lightweight solution load and NGEN support for extensions;
- Lastly, we’ve updated the Visual Studio marketplace to make it easier to find and install extensions;
The rest of the post goes into more detail on each of these areas.
If you’re an extension author, you’ll want to read this post carefully, since we’re asking you to do some work in this release to support the performance and installation work we’re making to Visual Studio. There is some inevitable friction here, and so we want to give you a heads-up so that you can make the appropriate changes to your extension before we go live.
Performance
One of the top extensibility requests in UserVoice is for tools that let extension users identify slow extensions and disable them if necessary. We designed the extensibility model in Visual Studio to offer great power – authors largely have access to the same APIs that we use internally – so it’s important that extensions do not degrade overall product performance.
In Visual Studio “15”, we have focused on addressing three specific performance bottlenecks in particular: (i) Visual Studio startup performance; (ii) solution load performance; (iii) overall responsiveness. And in addition to improving our own performance, we’re now also adding features to help you measure and manage extension performance in these areas.
If we detect a slow-performing extension that falls into one of these categories, we will display a message that identifies the extension and gives the user the opportunity to disable it. Here’s an example with a malicious extension that sleeps for six seconds during initialization:
You can see the performance of extensions on your system at any time by selecting the Help / Manage Visual Studio Performance menu item.
We trigger this notification by measuring the total initialization time spent by the extension on the main thread. If it exceeds a lower time threshold, we will warn users that the extension is loading slowly; if it exceeds a second, still higher time threshold, we will offer to disable the extension for the user.
We use the same dialog to also track extensions that introduce delays to typing responsiveness. Studies have shown that input latency greatly impacts the perception of an application’s performance. So, Visual Studio now measures the duration of calls within extensions to extension command filters and editor event handlers that are triggered by typing characters, and if those calls regularly take longer than a predefined threshold, we display an infobar to warn users of the impact of that extension on typing responsiveness:
If you’re an extension author, we recommend these best practices to ensure your extension performs well in Visual Studio:
- Use rule-based contexts to specify precise conditions when your extension should be loaded. For example, you can ensure that an extension is only loaded when a C# or Visual Basic project is active, rather than at Visual Studio startup.
- Use the AsyncPackage support in Visual Studio 2015 and above to allow packages to be loaded on a background thread.
- Review your extension’s command filters and editor event handlers (such as ITextBuffer.Changed) and perform any operations longer than 50ms asynchronously;
- Minimize work performed during package initialization, deferring it instead to occur on invocation of a user action.
Batched Extension Installations
Another common feature request from Visual Studio 2015 was to make it easier to install, update and remove multiple Visual Studio extensions at once. Visual Studio “15” now lets you batch up extension change operations to occur at once.
Here’s a screenshot:
Size
With the new Visual Studio installer, we have refactored Visual Studio to be more modular, installing just the features you need for the work you’re doing. The smallest configuration of Visual Studio installs in just a couple of minutes on typical machines, and the increasing number of Visual Studio developers who are using it for new platforms and languages like Python and R no longer need to install support for things like C#, MSBuild and ASP.NET to get a great Visual Studio working environment.
We’ve therefore created a way for extension authors to express their Visual Studio component dependencies by extending the VSIX manifest. The model is designed so that if dependencies are missing, the extension installer can acquire and install the missing components automatically. With this approach, for example, an extension can hint to the installer that it requires the managed language debugger to be available for the extension to run successfully.
We’re updating the extensibility tools to automatically emit these changes for new projects. By default, we set a dependency on just the Core Editor, but you can add additional components by selecting them from the Prerequisites tab. Here’s a screenshot:
The next public build of Visual Studio “15” will contain the updated manifest designer, and we’re planning to ship an update to the tools in Visual Studio 2015 to support the new manifest format before we complete Visual Studio “15”.
New Extension Capabilities
We’re taking advantage of the changes to the standard VSIX extension format to add some powerful new capabilities for extension authors.
- Extension assemblies can now be compiled into native images (through NGEN) at install time, for added performance. You can specify NGEN options from the Properties toolwindow:
- Extensions may now install files in certain locations outside of the extensions folder. This enables new scenarios like MSBuild tasks to be installed from a VSIX folder.
One caveat: these capabilities are only available for “all user” extensions because they require elevation. We hope to encourage extension authors who have until now been forced to wrap their VSIX in an MSI to accomplish these needs to be able to transition to a pure VSIX, enabling better manageability, roaming and auto-update capabilities for users of their extensions.
Lightweight Solution Load
In Visual Studio “15”, solutions will load faster due to support for lightweight solution load. When lightweight solution load is enabled, Visual Studio will delay fully loading projects until you start working on them. Visual Studio will still preserve common functionality, such as allowing you to navigate through your codebase, edit code, and build projects without fully loading projects. We’ve seen this speed up solution load by a factor of two or more.
This feature is still “experimental”, so to try out this feature in Visual Studio “15”, you’ll need to manually enable the lightweight solution load checkbox in Tools / Options / Projects and Solutions.
If you’re an extension author, lightweight solution load may impact your extension if you depend on a project to be fully loaded. Our team is putting together steps and guidance on how extensions can know when projects are not yet fully loaded, and how to respond accordingly. We will share this guidance as soon as possible.
Detecting Installations
Some tools need to get more specific information about a Visual Studio installation, for example an external utility that needs the location of the C++ compiler toolset. Along with the changes to Visual Studio to reduce system impact, we’ve added some new setup configuration APIs to make it easier to discover instances of Visual Studio “15”. Heath Stewart’s blog includes more detail about these APIs and samples for managed and unmanaged code.
Marketplace
One last significant change: we’re transitioning to the Visual Studio Marketplace as a place for discovering and installing extensions, again in response to your feedback. The marketplace is a modern website that supports extensions for our developer tools family, including Visual Studio itself, Visual Studio Code and Visual Studio Team Services.
In the next months, we’ll begin the process of retiring the old Visual Studio Gallery. You don’t have any work to do if you’re an extension author – we’ll migrate all the data across automatically. We are excited by some of the new features we’ll be able to offer extension authors and users alike once we are live on the new site.
More Information
If you’re building an extension for Visual Studio “15”, we’re glad to hear from you. In particular, the editor and extensibility engineering teams hang out on our Gitter team room along with many other extension authors. You can also submit or vote on feature requests in the extensibility area of our UserVoice site – we’re listening!
![]() |
Tim Sneath, Principal Lead Program Manager, Visual Studio
Tim leads a team focused on Visual Studio acquisition and extensibility. His mission is to see developers create stunning applications built on the Microsoft platform, and to persuade his mother that her computer is not an enemy. Amongst other strange obsessions, Tim collects vintage releases of Windows, and has a near-complete set of shrink-wrapped copies that date back to the late 80s. |









This might seem an obvious question, but I’ll pose it here anyways – Will Visual Studio 2015 extensions be supported in Visual Studio “15”?
It’s a great question @adli89. Extensions will need to be upgraded to the new format in order to run on Visual Studio “15”. Fortunately, the new extension format is fully backward compatible with Visual Studio versions 2012 and up. So extensions written for Visual Studio “15” can be installed on Visual Studio 2015 (providing they were authored to do so).
Many extensions have already been upgraded to the new format, and we expect many more to be available in the upgraded form soon after the official release.
What work is being done on overall debugging performance and specifically the performance of edit continue in debugging mode while your application is running in large C# project (100K + lines of code)?
Can only agree. Debugging large multithreaded managed applications is a pain. Stepping through source code is impossible. Instead one can only place breakpoints. Inspect variables, and then quickly release the application again. Anything beyond this will cause the debugger to crash/freeze.
This gets even worse when debugging large mixed-mode applications (native + managed). This requires
forced compatibility mode or else the debugger will crash/freeze when hitting a breakpoint and trying to inspect variables.
This is great!
Make VS great again! 🙂
Thanks Jimmy! 😀
Can we disable/remove unneeded VS features?
We use little in VS beyond
– compiler
– debugger – quickview – mouse over variable value view – step into, step over, step out
– code text editor + intellisense + fonts/colors
– refactoring
– project/solution explorer
– properties window
– Toolbox
– drag and drop ui designer (long ago for winforms)
– output panel
– find references
– full text search – solution wide, directory tree – click on line in search results to view file+line found
– intermediate window
– call stack
– thread browsing in debugging
– code refactoring hints – unused references, unused variables, method may be made static
– statistics above a method (number references, …)
– collapsable code sections
– double click on token in code editor to highlight other occurrences of the text
– editor hot keys (shift block left/right, select text, jump to top/bottom of file/…
– document outline view
– view IL disassembly during debugging
– attach debugger to another process
A gap analysis between Visual Studio code and the full Visual Studio would reveal the minimum viable feature set to be added to Visual Studio code to let it replace the full Visual Studio for many non web projects.
The full Visual Studio, since v6 in 2000, has too often been a dumping ground for the ‘cool new feature my MS team added’.
Successive releases of Visual Studio need a set of removed features in the release as well as set of new features to maintain and grow the product. This is not a problem with other mature products (SQL Server).
Thanks for the great feedback BpbT. The good news is that Visual Studio “15” delivers exactly what you’ve asked for. You will be able to quickly and easily install just the Visual Studio Core Editor, which will contain a minimal subset of components (basic text editor, Solution Explorer, Team Explorer, and some other core features). Using the new installer, you can selectively add additional components or install workloads of curated components specific to an area of development. And you can always go back in and add/remove components at your leisure.
I would not believe I am alone in thinking:
While new features are always going to be shouted about, what I would really like to hear is what has been or is being done to fix the many, many broken existing features that are used heavily on a day to day basis?
I think we all understand that some defects are hard to repo, but some of the issues experienced in VS2015 as it stands can in some cases make the product almost unusable. And those are mostly the straight forward vanilla editing experience features that are broken such as performance degrading web caching, auto-rename hanging, failures to refresh/acknowledge updated references in solutions, VS online TFS refresh freezing and many more.
@Tim, you know I have been a long time advocate of VS/Blend + multiple platforms, devices etc and MSFT in general, and you also know that I am not afraid to speak up when I see failings in products, but if you want to really make a difference, developers in the outside world are looking for a leader from within MSFT to say enough is enough. Drop tools – no “new” features, until we get this thing running properly again, for all developers and their chosen platforms.
For many of us who live inside of VS daily, the past few years have felt like we have been trying to pass a kidney stone. Please fix this. Make your next announcement “We’re listening – and we’re going to fix it.”
Many thanks to all the folks who work tirelessly to build VS including this announcement.
Thanks for your comments Brennon. Rest assured that “we’re listening” and that we are constantly working towards a better, faster, more reliable product. And though we announce our new features loudly, we are regularly checking in important fixes to existing functionality.
The latest round of major changes have been targeted to addresses many of the issues users have been reporting about the size and performance of Visual Studio. The new installation model lets users get up and running quickly and easily with just the components they need. And the extension performance monitoring goes a long way in helping to identify which tools and features are affecting the speed of Visual Studio. Plus, the new lightweight solution load makes a big difference for users who need to load large solutions. All of these changes combine to provide a much improved experience in terms of performance and productivity.
Top 5 :
– Fix the bugs
– Reduce memory consumption another 30%
– Switch to flat project solution files without dependencies between elements (no nested formats like xml or json)
– Key value pair where key is a path and value is a comma or pipe delimited text list
– Switch app.config, web.config to use a flat structure and not be tied to serialized .net objects or use a nested file format
– Key value pair where key is a path and value is a comma or pipe delimited text list
– Use wildcards in project solution files – This has been in unix/linux build tools for 20+ years
The last three have cost our development team man-months in the last year and have been open feature requests for nearly 10 years.
De-emphasis on UX designer requested tweaks as core functionality comes first.
Thanks for your suggestions David. I’m sorry to hear you’ve been experiencing pain with project and solution files. We will consider your suggestions.
In the meantime, feel free to air your ideas on UserVoice, where other developers can vote for them and contribute to the discussion.
https://visualstudio.uservoice.com/
“De-emphasis on UX designer requested tweaks as core functionality comes first.”
Core functionality is a matter of perspective, as are the priorities of issues in terms of importance.
Clearly what we agree on is the fact that existing features and functions need to be prioritised above new areas.
Can it open windows 8.1 project or does it still not support it. If it does not support it what easy way can I migrate my app from 8.1 to 1
To continue to work on Windows 8.1 or Windows Phone 8.1 projects, you will need to use Visual Studio 2015 Update 3 as we do not support these projects in Visual Studio 2017.
To migrate these projects to Windows 10, this MSDN article might help. If you have any questions, please don’t hesitate to reach out to at unnir at Microsoft dot com and we will help you thru the migration.
https://msdn.microsoft.com/en-us/library/mt148501.aspx
Thanks,
Unni
Program Manager,
Visual Studio
Interesting to hear you mention that: Is VS 2017 now the official title of what has previously only been known as VS15?
Tim,
By ‘Curated’ do you mean a curated set of Microsoft written and supported tools or a wrapper around third party open source tools?
Larger applications under the 7 yer business record retention category need tools that will last at 7+ years and not get into a yearly cycle of cannot upgrade Visual Studio as it breaks one or more of the wrapped obsolete/unsupported third party open source tools.
It’s already a cost sink for third party UI libraries and adding more via wrapped third party open source tools does not lower the risk.
Is there a way to have VS log when an extension does something? For example, I feel like I have multiple extensions installed that are trying to reformat my code when I finish typing something. Unfortunately, I don’t have an easy way of determining which extension is doing the reformatting to correct the problem. I could obviously divide and conquer my installed extensions to figure it out, but that seems very time-consuming. Would be better if I could simply reproduce the problem and then look at a log to see what might have happened.