Setup Improvements for Visual Studio

Setup Improvements for Visual Studio

Rate This
  • Comments 82

Setup is the first experience most of us have of Visual Studio, and in the Visual Studio 2012 we’ve made significant investments in improving your experience. Many of you have already told us you like our new setup user interface (thank you!). We have also been investing in ratcheting up the speed at which we lay bits down, improving the experience for non-English installations, and honing the experience you use to select which components to install.

Let’s start by looking at the last of these first. As many of you noted, the Visual Studio 2012 (11) beta didn’t have the capability to customize installation. Although most users select the default (which is to install the full product), a significant number of you customize the installation. During beta, we hid the customization option to help us gather more data on full installation performance and reliability. We’re happy to say that we brought back customization in Visual Studio 2012 RC. Based on the choices you make, the customization allows you to reduce your install size by about 2.5GB and about 25% of the install time.

During the beta timeframe we ran a survey of several hundred beta users and asked they would like from setup customization. The overwhelming answer was to improve VS performance by not having it load features that aren’t used, followed by reducing the complexity of the product and reducing on-disk size. We think we’ve gone a good way toward addressing these desires, but we know we can do more. We are very interested in how you’d like to see this look in future releases, what level of granularity you’d like, and what kinds of things you want to customize about your Visual Studio install. So please give us feedback on setup customization, either in the comments to this blog post, in the Forums, as suggestions on User Voice, or as bugs you log on Connect.

Customization isn’t the only investment: one of the most significant areas we’ve invested in is the speed at which setup lays bits down. Whether you’re installing Visual Studio Express products or a full installation of Visual Studio Ultimate, we wanted to shorten the amount of time it takes to get you coding. From setup perspective, we look at a couple of measures of performance. The first is how long it actually takes to complete a full installation of the product –about 35 minutes on average for a full installation of VS Ultimate from local media on test hardware representative of the average VS customer. We also look at the throughput we are able to achieve during installation – how long each VS package takes to install relative to its size. As an example, some packages that compress really well but are otherwise very simple like MFC maintain a throughput of up to 7MB/Sec; other packages that are small but need to place files in the global assembly cache or write a lot of registry keys may achieve throughput below 1MB/Sec. From beta to RTM our goal was to improve both of these measures: the amount of time it takes to install VS in absolute terms and overall the throughput.

To do this, we undertook several efforts. To start, at the beginning of the Visual Studio 2012 cycle we transitioned off of our old install engine onto a new engine that by itself is capable of maintaining faster throughput on simple packages than the setup engine we used in VS 2010. We also made a change early on to parallelize the download of the packages we’re installing as the installer is running so that much of the download time happens in the background while installing.

But that wasn’t enough. So we asked ourselves a pretty audacious question: between beta and RC could we cut 10 minutes (about 30%) from the installation?

For the last three months, that’s what we’ve been trying to accomplish. We found places in setup where we were calling the same function repeatedly where we didn’t need to. We unpacked the templates from VSIX packages and put them into MSIs to eliminate the double-decompression. We found several duplicate packages and, although the installation process wouldn’t install them, we removed them to save the seconds it would take to check to see if they were already present. And of course we reduced the number of custom actions.

So did we make our 10 minute goal? Almost: we eliminated a little over 8 minutes off of the installations in our performance lab before we had to begin locking the release down. For the rest of the release we’re going to focus on maintaining those improvements and setting ourselves up for a great RTM.

One more thing for users who install VS in a language other than English: Visual Studio 2012 supports language packs. Language packs make it much faster and easier to add an additional language to Visual Studio because you don’t need to download and install a full version to add a new language: you just add the pack for the language you want. 

Please let us know how we are doing and how you’d like to see setup change in the future. We have a lot of good ideas already, and are always open to new ideas or to confirmation that we are prioritizing ideas correctly. As always, we are reading your comments on this post, watching for issues in the Forums, listening to your suggestions on User Voice, and reviewing any bugs you log on Connect.


David Guyer – Senior Lead Program Manager, Visual Studio Setup Team

Short Bio: David Guyer is currently the Lead Program Manager for Visual Studio Setup and has been working on deployment technologies in Visual Studio since Visual Studio 2002.

Leave a Comment
  • Please add 4 and 1 and type the answer here:
  • Post
  • David:

    Had something break in the Help 2.0 Beta last week.  Tried a repair operation using VS11Beta Setup.  Item did not get fixed but Setup managed to steal another 850+ MB from my hard drive.  If its performing a repair and there isnt anything getting fixed, why such a large hard drive loss?

  • I would like to see language options back again. I never use F# or C++ so don't see why I need to install them or have those project templates in the "New Project" dialog.

  • Earlier James wrote

    "I think the whole way that shared components are managed -- not just for VS, but other related products as well, needs to be vastly improved.  When you uninstall a product, everything that CAN be uninstalled should be uninstalled, and when the last product using a shared component is uninstalled, the shared component itself should also be uninstalled.  It does sound like you understand this need and are already looking for ways to make this happen.

    Related...when something is uninstalled, it should be FULLY uninstalled: no dangling registry keys, files or empty directories, cached stuff in the user profile, etc.


    I completely agree 100%.  One of the biggest frustrations is trying to safely track down and remove all the left over parts after an uninstall.  I just uninstalled VS11Beta the other day then spent several hours manually trying to uninstall pieces left behind in the Control Panel Programs and Features cpl.  Somethings were obvious VS11Beta parts to try but some would not uninstall.  Other things may have been misteps that I did get to uninstall but will find out later I should not have.  The VS product need to be the one to do this correctly, not me.  You should make sure that you can return a system to the same state prior to VS when uninstall is finished.

    A long time ago a coworker and I discussed the need for an ownership tag on files in an OS.  The tag works similar to what James was talking about, each program that uses a file adds its ownership tag to the files ownership list.  When the program is removed, it removes all its ownership tags.  If a file / shared component has no ownership tags, then the OS knows it is safe to delete (uninstall) and does so if appropriate.

    This system would work for VS2012 speciffically but it can also be broadened to cross product versions or better still, implemented, as my coworker and I had discussed, in the OS as a system wide feature to ensure files / components are managed correctly.

    Consider talking to the Windows 8 team about adding this into a later version of the OS too!

  • Tried the VS2012 Pro RC install from the english ISO last night but it failed.  The setup screen reports Error "Microsoft Visua Studio 2012 Shell (Minimum)  The system cannot find the file specified."   Several other items followed marked as warning but with similar messages.  I tried looking at the log file but all it said was an error occured.

    First, how do you fix this.  Im redownloading the ISO incase the version I got was corrupted somehow but I doubt that will fix it.  Can you report back more information in setup that explains what it is trying to install and how it fails so there is a better idea of what needs fixing.  Perhaps there is a dependent product it cant find or maybe I uninstalled something I should not have -- with the current lack of info in setup and its log, I cant tell.

    Also, you need to lighten the listbox background a bit and make the scrollbar a bit more obvious -- at first I had no idea the three vertical dots to the left of the first message indicated I was looking at a listbox with more content.

  • I guess I don't care all that much about speed it takes to install VS. I only do it a few times a year; it's fast enough for me. Customizing setup is more important; say I want only C++/C# combination and nothing else. I don't want any local help to be installed either; it's a waste of space.

    I need VS11 to coexist with older VS versions (2010, 2008, 2005), as long as you can guarantee that, I'm happy.


  • At the end of Uninstall for Beta got this strange message:

    "Setup Completed.

    However, not all features installed correctly.

    Please correct the following problems to ensure full product


    Warning: Microsoft Visual C++ Compilers 11 - ENU Resources

    This action is only valid for products that are currently


    First, It would be better if it said Uninstall Completed to acknowledge that it is in fact finished uninstalling the product.  Second, this error message really makes no sense unless it a bug in setup related to a dependency.  Perhaps the C++ compiler is uninstalled before a component that requires it presence is uninstalled and it tripping over that.

  • @James and @M.R.

    I agree with you completely that package dependencies should be managed in the OS, it’s the best way to get good cross-application behavior.  Since it’s not there, we did the next best thing and worked with the WiX community to develop a feature called Package Ref Counting.  You can find out more at Heath’s blog here .  We are using this as much as possible in Visual Studio so that packages that participate are able to not have an ARP entry, and we will have cleaner scenarios when different editions of Visual Studio are installed and uninstalled.  This has worked great for those packages where Visual Studio is the only product that consumes them.  

    Unfortunately, that means it’s a partial solution because a number of the packages included in VS are shared with other products and applications, whether from Microsoft or other parties.  If we remove these packages during uninstall we have high risk of breaking other applications, which is something we really want to avoid.  That means those packages have an ARP entry and are left when we uninstall Visual Studio.

    We are investigating an option that we hope will make RTM that will make it easier to force uninstall everything VS installs, unless there is a ref-count on it.  That’s something we’ll announce at RTM if it makes it.

    This is something we know isn’t done yet.

  • @Zouzou,   @Daniel Smith, and  @M.R.

    The UI in Visual Studio 2010 was beginning to show its age since it hadn’t really changed since Visual Studio 2002.  Our goal for the UI in this release was to streamline the experience by reducing the number of steps/clicks to install VS, the number of pages you go through, and removing information that wasn’t helpful to most users (problem solving details are in the logs).  In the course of developing the Setup experience, which we needed to do anyway since we adopted a new setup engine, we made the UI have a look and feel that resembled the product we are installing, and it does have some Metro styling as a result.  I think it looks much better.

    There are still some color adjustments we are making for RTM that should help with controls showing more clearly.

  • @M.R.  

    I see that you are having a few issues repairing or installing Visual Studio.  I can get someone to investigate these and see what we can do to help.  The best way to get this to us is to log a bug on and attach the logs that come out of running the log collector tool at .

    If you are having trouble with the ISO, I do recommend that you try our product download instead.  It uses VS Setup's download manager to download and verify all the packages.  You can then copy, burn, move, or install from that download image. It's the same as if you copied all the files out of the ISO.  You can find it as the "Product Layout File" on the download page.

  • "Many of you have already told us you like our new setup user interface (thank you!). "

    Were they smoking crack at the time?  Did they tell you that they liked the new purple theme on this website too?  Argh.  Why?  There are a lot of people who really dislike purple.

  • @M.R. If you are concerned over whether the download is corrupt, you only need to check the SHA1 hash of the file to see. I use a shell extension called hashcheck for this, though there are many others.

    @David, did you see my comment about info on each option? Is there a blog post / help topic / release note / whatever that contains information about what is included in each of the togglable  options? Yes, storage is cheap, but when using SSDs and having mutliple VHDs for various scenarios (clients etc.) it's still at a premium. Choosing options to slim down should be a fairly easy decision. It was not in the present form.

  • Hi David Guyer,

    I see the ticket 745554's status is "Resolved as Fixed". So I write my comments here.

    1. It is a bad idea to list "Microsoft Foundation Classes for VC++". Although it can reduce installation size, but it break the whole hierarchy of the installer. MFC is just one component of VC++, we do not let user to select language, but let user to select one component under certain language? It is so ugly! Although I suggest to save space, but list it here is a wrong way!

    Could you help to remove it? I can endure to pay space to install MFC, but cannot endure to see a so ugly option! it should be in the same hierarchy level with Web development, Office Development...etc!

    2. I read your comments

    I think I understand your idea. Setup option is base on platform, not language. Not like VS2003, VS2005 and VS2008, they let programmer to select language and features under language. For example, under VC, we can select MFC, ATL, x86, x86_64, Itanium...etc. VS2012, VS2012 give option base on platform, such as Express Studio, Office, Web, Sharepoint, SQL Server, Mobile, Desktop...etc.

    I agree with you, although option base on language can give programmer more flexible choice, but in RTM timeframe. What you can change is limited. So I suggest to focus on:

    - SQL related components, for example Expression Edition, tools, CLR, service, objects...etc, except some that is used by IDE, such as SQL compact edition used by Intellisense, set an option "SQL Server 2012 Development" for them.

    - There is no "Desktop Development". Can we add it?

    - There is no "Mobile Development". Can we add it? I think VS2012 does not include WP development, but it seems that we have ARM compiler.

    - For SQL Server, there are items we are confused about:

    Microsoft SQL Server System CLR Types

    Microsoft SQL Server System CLR Types (x64)

    Microsoft System CLR Types for SQL Server 2012

    Microsoft System CLR Types for SQL Server 2012 (x64)

    Are "Microsoft SQL Server System CLR Types" and "Microsoft System CLR Types for SQL Server 2012" the same?

    - Be carefull that there are duplicate items displayed after installation. Small but very ugly bug!

    Microsoft SQL Server 2012 Data-Tier App Framework

    Microsoft SQL Server 2012 Data-Tier App Framework (duplicate entry)

    - So many items installed, and we could not uninstall them all by "Microsoft Visual Studio Ultimate Edition" in uninstallation list. So can we add one item to remove whole VS2012 by clicking once?

    3. This is a suggestion for SP1, can we release VS 2012 with SP1 for MSDN user?

    From VS2008, I found that after installing SP1, we must uninstall SP1 if we want to change or delete some features. You know install SP1 is a long and boring process. In fact from VS2003 to VS2010, we  only have SP1, no SP2 at all. So can MS merge SP1 fix into RTM?



  • David:

    I suggest you to check names in uninstall program list to let similar component listed together.

    For example: all SQL related component together. In VS2010, Microsoft SQl Server XXX and Visual Studio Tools for SQl Server are not listed together.

  • @Scott and others… :-)

    We definitely are hearing that having languages being selectable is something you want, on this blog, and also in the Beta survey, it’s at the top of the list.  It’s something we did try to do for this release, and will be looking into how we can really do it right in a future release.  Here’s a bit more of the story…

    As we brought back customization, we spent a lot of time looking at providing language selection.  The main language we’ve been asked about was C++ and we looked at making all of C++ selectable.  This proved to be very challenging because of dependencies that had evolved across the product on components under the C++ feature.  In the end, the re-authoring and refactoring work to make more of C++ selectable exceeded our time for this release. Instead, we worked with the C++ team to put most of the space-consuming files into a selectable item, and removing other files that weren’t needed altogether.  As a result, the MFC selectable item saves about 2GB of drive space, and all users get an additional 500MB savings.  There are similar problems making VB and C# selectable also because of increased dependencies woven through the setup and binary levels.

    Another thing we’ve been looking at is that the platforms Visual Studio now supports have a bigger disk space impact than the programming languages (aside from C++), and are a key part of the applications you build.  We want to give these dials to developers because they are meaningful and impactful.  Providing selectable platforms and languages at the same time is complicated because they are intertwined.    We need to spend some time making sure we have the right dials for installation, and the right experience that doesn’t get really complicated.  

    For example, let’s say you selected to install Silverlight development.  Do we auto-select VB, or C#, or both?  Then, if you deselect VB, how do we not install the C# Silverlight support?  Another issue: do we make sure you can’t deselect C# until you also deselect Silverlight? How do we communicate in the UI why you can’t deselect C#.  And let’s say you also add Metro style application support, do we add C++ and JavaScript, or not since C# is already selected.  What if no languages are already selected?  It gets complicated very quickly.  

    As a result, we picked the path that would give the most value to you that we could afford to fit this time around and one we could build on.  We know we’ve got more to go before it’s the right finished experience. That’s why I’m so appreciative of your feedback, so that we can make the right improvements moving forward.


    The selection experience is meant for you to not have to worry about what’s included in each item.  You select or deselect those items that you plan to use in your coding.  Plan to do SharePoint, select that.  Web development, select that.  Need Microsoft Foundation Classes for C++, select that.  All the dependencies required for that item will be installed. You don’t need to select a second item to get something you selected to work.  As a result, sometimes you won’t see as much disk space savings unless you deselect a few items, due to packages shared across selectable items.  If that doesn’t clarify things for you, please let me know so I can understand what’s not quite working for you.


  • @Yanghua

    Thank you very much for your comments. You’ve clearly spent some time thinking about what you’d like to see.  I just posted a comment about customization that I think clarifies some of the things you’ve just raised.  I’ll try to address some of the other ideas.

    I am currently investigating whether we can make a SQL selectable item.  It wouldn’t include all installed packages that come from SQL due to dependencies that some VS features have, so we are exploring what we can make customizable and making sure that it makes sense.

    For this release, we can’t currently make a Desktop item, mainly for the reasons I described in my previous post about VC++/MFC, and Mobile/Phone tools are releasing separately.  These are the kinds of things I’m looking at making available in a future release.

    The two different SQL System CLR Types names are for two versions of SQL, so are not the same.  Where the data tier app framework has the same entry, one is the x86 version and the other is the x64 version, and the display name has a bug that it doesn’t include the platform in the name.  I’ll log a bug on that and see if that can be fixed.

    We are investigating an option that we hope will make RTM that will make it easier to force uninstall everything VS installs, unless there is a ref-count on it.  That’s something we’ll announce at RTM if it makes it.

    We are also investigating your request to ship RTM and SP1 together in a single install.  This is a common request that we’ve begun to review the feasibility.  There are a lot of scenarios where you may have multiple products installed or multiple languages that we’d want to get right.  And we are also figuring out how this would relate to VSUpdate ( ) as well.  Lots to look at here, but it’s something we are looking at because of the interest.

    Thanks again, hope this answers your questions.

Page 3 of 6 (82 items) 12345»