Visual Studio 2019 v16.10 and v16.11 Preview 1 are Available Today!

Justin Johnson

What’s new in Visual Studio 2019 v16.10?

We are excited to announce the release of Visual Studio 2019 v16.10 GA and v16.11 preview 1. This release makes our theme of developer productivity and convenience Generally Available to Visual Studio users! We’ve added C++20 features, improved Git integration, improved profiling tools, and a host of features that accelerate productivity.

Download the latest Visual Studio release to try the new features in 16.10. And as always, we love your feedback and interactions through our Developer Community.

C++

Our compiler and STL are now feature-complete for the latest available C++20 standard! 16.10 comes with a few much-anticipated features: calendars, timezones and <format>. These features are all available under the /std:c++latest switch. The /std:c++20 switch is not yet available as some features are expected to be amended by Defect Reports (ISO C++20 bug fixes) in an ABI-incompatible way (see Microsoft/STL Issue #1814 for more details).

The <format> is a new facility for text formatting based on fmtlib. It provides a fast and safe alternative to iostreams and the printf family:

auto version = 20;
std::format(“STL is now C++{} feature-complete!”, version);

Calendars and timezones are an extension to the existing <chrono> facilities. They provide functionality for representing and manipulating dates and times in a type-safe and time-zone aware fashion.

std::chrono::year_month_day world_bee_day = May/20d/2021y
std::format("Buzz buzz on %F!”, world_bee_day);

In addition, we’ve improved the IntelliSense experience for Modules, Ranges, and Concepts. Go-to-definition works on both modules themselves and definitions imported from modules. Ranges are notoriously difficult to process for the compiler, but IntelliSense can now give you completion for them. You’ll also get completion for names defined within concepts.

Visual Studio now has completions for Ranges.
Visual Studio now has completions for Ranges.

The LLVM OpenMP runtime is now supported on x86 and ARM64, in addition to x64. Pass the /openmp:llvm switch to target it.

If you want to use C++20-style coroutines but are targeting C++11 or C++14, you can now use the /await:strict switch to get the desired behavior.

We’ve improved our coroutine debugging and visualization. In particular, the visualization for std::coroutine_handle<T> now displays the original coroutine function name and signature and the current suspend point.

Coroutine debugging and visualization has been improved.
Coroutine debugging and visualization has been improved.

If you’re using our CMake support then you’ll now be able to use CMakePresets to specify configurations rather than CMakeSettings.json. This format is consistent across Visual Studio, Visual Studio Code, and any other tools which support this new standard.

Git Productivity

The status bar has a new branch picker that allows you to filter local and remote branches and perform common actions from the right click context menu.

Branch picker in the status bar.
Branch picker in the status bar.

The branch picker in the status bar as well as the Git Changes window now check out a local or remote branch when you single-select the branch.

Left click to check out a branch and right click for additional actions.
Left click to check out a branch and right click for additional actions.

Filter and switch between local Git repositories from the status bar repository picker. The context menu on right-click allows you to remove items from the list.

Remove items from the repository picker list through the context menu.
Remove items from the repository picker list through the context menu.

Sync (Pull then Push) your branch with the remote from the unpushed commits button in the status bar, and from the Sync command in the Git Menu.

Sync button in the status bar.
Sync button in the status bar.

Fetch and pull from the Git Repository window history pane even when there are no incoming commits. Access these sections from the status bar or the keyboard shortcut Ctrl+0+Y.

Incoming section in Git Repository window with a callout to fetch and pull buttons.
Incoming section in Git Repository window with a callout to fetch and pull buttons.

Select a commit in the Git Repository window to view its details and the comparison of file changes without having to navigate to other windows. Select two commits and right-click to compare them in the same window. Pop out the details into their own window for full screen visibility to deep-dive into the changes.

Embedded commit details and file comparison in Git Repository window.
Embedded commit details and file comparison in Git Repository window.

View the number of deletions and insertions in a file, and change the layout of the comparison.

Multiple commit windows popped out.
Multiple commit windows popped out.

You can perform even more actions now from the Git Changes window. The toolbar icons are customizable and you can choose which actions to show. You can Sync with multiple remotes from the overflow menu. And you can open your repository’s remote webpage in the browser.

Git Changes overflow menu with callouts to Sync, open in browser, and toolbar actions.
Git Changes overflow menu with callouts to Sync, open in browser, and toolbar actions.

Automatically re-connect or prompt to establish initial Azure DevOps connection when opening an Azure DevOps Git repository. This enables access to work items and builds for the opened repository.

Info bar prompting Azure DevOps initial connection when missing
Info bar prompting Azure DevOps initial connection when missing

When resolving rebase or merge conflicts, the merge editor and the context menu will show you the branch names for the Current and Incoming branches. This fixes the confusing Source and Target terminology issue.

Context menu when resolving conflicts displays the branch names
Context menu when resolving conflicts displays the branch names

 

Rebase and Merge editor displays branch names in the heading
Rebase and Merge editor displays branch names in the heading

We added menu items that are shortcuts to the PR creation and list pages to make it easier to create and view pull requests. The menu is dynamic based on whether your repository is on GitHub or Azure DevOps.

Create a PR and view list of PRs on the web from the Git menu
Create a PR and view list of PRs on the web from the Git menu

Git Settings

We added a few new options in Git > Settings to manage how you open and switch repositories. You can now keep the current solution open when switching to another repository

Setting to keep current solution open
Setting to keep current solution open

You can also choose not to load the repository root folder when opening a repository. This will keep the Solution Explorer empty and you won’t get a solution list.

Setting to open the folder
Setting to open the folder

However, if you do choose to open the root folder, Visual Studio won’t automatically load the solution anymore. Instead you’ll see the folder view and solution available in a list you can select from. You can change this behavior through Git > Settings by toggling the checkbox.

Setting to toggle auto-navigation of Solution Explorer
Setting to toggle auto-navigation of Solution Explorer

You can choose to check out a branch from the Git Repository window by double-clicking the branch name. If you want to change this behavior, then toggle the checkbox in Git > Settings.

Settings to toggle auto-sln load and branch check out.
Settings to toggle auto-sln load and branch check out.

Performance Profiler

The launch page for the Performance Profiler now has links to help guide users to online documentation detailing how to use the tools along with our toolbox video series. You can usthese to learn more about the tools and learn how to better identify areas in your code for optimization and validate your changes.

Graphical user interface, text, application, email Description automatically generated
Graphical user interface, text, application, email Description automatically generated

The .NET Object Allocation tool in the Performance Profiler is first tool transitioned to our new analysis engine which is significantly faster and provides more features. After collection you can get to your results and build call-trees faster (~40% increase). We now also support SourceLink to pull down sources, so you can see exactly where code is allocating, even if it is not in your code.

Graphical user interface Description automatically generated
Graphical user interface Description automatically generated

This requires symbols for the corresponding code which can be pulled down from the Microsoft Symbol Servers, go to Debug > Options > Symbols to enable this.

Graphical user interface, text, application Description automatically generated
Graphical user interface, text, application Description automatically generated

Containers

This release includes some exciting features for users of the Docker container tooling. You can now run any combination of services defined in your compose files, and enjoy improved container and image management in the Containers window. For more information, see our New Features for Containers announcement in the 16.10 preview 3 blog.

.NET Productivity

From our .NET team, we bring you several features to help with continual improvements in productivity.

We have added functionality through the Remove Unused References command. This command allows you to clean up unused project references and NuGet packages. This option is turned off by default, but you can enable it under menu Tools > Options > Text Editor > C# > Advanced. Select the Remove Unused References command in Solution Explorer (Experimental). Once the option is enabled, the Remove Unused References command will appear in the right-click menu of a project name or dependencies node.

Remove unused references in the Solution Explorer
Remove unused references in the Solution Explorer

Remove unused references dialog box.
Remove unused references dialog box.

When you select Remove Unused References, a dialog box will open. You can then view all references that are going to be removed, but you also have the option to preserve any you wish to keep.

IntelliSense Completion

There is additional IntelliSense completion for Enum values when a type is known even if the Enum value is not entered. We also expanded this option to include completion for casts, indexers, and operators.

IntelliSense completion for Enums.
IntelliSense completion for Enums.

There is now a completion option that automatically inserts arguments when writing a method call.

Automatically insert arguments when writing a method call.
Automatically insert arguments when writing a method call.

This feature is off by default so you will need to enable it in Tools > Options > Text Editor > C# > IntelliSense and select Tab twice to insert arguments (experimental).

To use this feature, start writing a method call and press tab twice (tab+tab). Notice that the method call includes arguments based on the method’s default values. Use parameter info to cycle through the list of arguments that you would like inserted by pressing the up and down arrow keys. Start typing an argument to bring up the IntelliSense completion list and type semicolon, which will commit the argument and add a semicolon to the end of the method call.

Visualize and Navigate Inheritance Chains

There is now a visual representation for navigating and inspecting the inheritance chain.

Visual indicators for navigating inheritance chains.
Visual indicators for navigating inheritance chains.

This option is off by default so you will need to turn it on in Tools > Options > Text Editor > C# > Advanced and select Show inheritance margin. Enabling inheritance margin will add new icons to the margins representing your code’s implementations and overrides.

Click the inheritance margin icon to display inheritance options that you can navigate to.

Navigate inheritance chains by clicking the margin icon.
Navigate inheritance chains by clicking the margin icon.

Test Explorer Accessibility Improvements

We’ve made several updates to the Test Explorer that improve keyboard accessibility and usability of the test detail pane and log files. For details, see Test Experience Accessibility Improvements in the 16.10 preview 3 blog.

WinForms Updates

We’ve refactored our Behavior Service for Visual Studio 16.10. This resulted in significant performance improvements to the new WinForms designer for .NET Core, 5, and 6. This also fixed many issues related to selecting, dragging, and dropping multiple controls.

XAML Tooling Updates

We keep improving existing and adding new features to make you more productive developing XAML UIs.

XAML Designer Quick Actions

Now you can change properties of your controls very quickly by using a pop-up menu behind the light bulb that is shown for a selected control.

Xaml designer quick actions
Quick actions in the XAML designer.

When you select a control in the XAML designer, you will see a light bulb. Once you click on it, a list of most commonly used properties for this specific control will be displayed saving you time finding those properties in Property Explorer or typing the code in XAML editor.

Supported controls: 

  • WPF: Border, Button, Canvas, CheckBox, ComboBox, Grid, Image, Label, ListBox, ListView, StackPanel, TextBlock, TextBox.
  • UWP: Border, Button, Canvas, CheckBox, ComboBox, Grid, HyperlinkButton, Image, ListBox, ListView, NavigationView, RadioButton, Slider, StackPanel, TextBlock, TextBox.

This feature is available for UWP, WPF Core, and WPF Framework (with the “New WPF XAML Designer for .NET Framework” feature flag enabled). You can also create your own actions, see XAML Designer Extensibility GitHub to learn more.

XAML Sample Data

Usually, to see how your controls look with data values you have to implement all data bindings, populate your database with values, and you need to run your application. With this feature you can see how your controls look with “dummy” data right away in the designer. For that set d:ItemSource='{d:SampleData}' on your ListBox, ListView or DataGrid. The control will be auto populated with a “dummy” data that matches your DataTemplates and BindingPaths. This data is shown in the designer and doesn’t affect your source code.

You can change how many items are generated using the ItemCount property, for example: d:ItemSource='{d:SampleData ItemCount=3}', by default it is set to 5.

What’s new in Visual Studio 2019 v16.11 Preview 1

.NET Hot Reload

In this release we’re excited to make available the first release of the new Hot Reload user experience when editing code files for applications such as WPF, Windows Forms, ASP.NET Core, Console, etc. With Hot Reload you can now modify your apps managed source code while the application is running with no need to pause execution or use a breakpoint. Instead, simply make a supported change and use the new “apply code changes” button in the toolbar to apply them immediately.

Make changes and Hot Reload your WPF application.
Make changes and Hot Reload your WPF application. View at full size.

In this update of Visual Studio this new experience is available when running your application under the debugger (F5) and is powered by the Edit and Continue (EnC) mechanism. Use Hot Reload alongside any other debugger features anywhere EnC is supported. .NET Hot Reload also works alongside XAML Hot Reload, making it possible to make both UI and code-behind changes in your desktop applications such as WPF or WinUI.

Both EnC and Hot Reload share the same limitations, so not every type of edit is supported. The complete list of what is or is not supported can be found in our documentation.

Hot Reload is now also available under the `dotnet watch` CLI tool for certain scenarios starting with .NET 6 Preview 3 or higher, for more details see the .NET release blog.

This is just the start of our journey, and we will be looking to improve this experience further in Visual Studio 2022 and future versions of .NET 6+, such as the ability to use Hot Reload from Visual Studio when starting your application without a debugger (CTRL-F5), reducing the number of unsupported edits, enabling the ability to edit Razor pages, support for using Hot Reload with Blazor and .NET MAUI applications and more. If you want to learn even more details about our vision for this technology, see our detailed blog post on the .NET Blog.

We really hope you will try Hot Reload with your application and provide feedback through the Visual Studio feedback feature.

.NET MAUI

Visual Studio 16.11 preview 1 adds support for .NET MAUI! .NET Multi-platform App UI (MAUI), shipping GA this November, is the best way to write cross-platform applications for iOS, Android, Windows, and Mac. .NET 6 Preview 4 ships today with new .NET MAUI features, including single project improvements, the ability to target all supported platforms, and Blazor hybrid desktop support! Visual Studio 16.11 p1 allows you to open, build, and debug .NET MAUI apps from the IDE, and adds functionality for the new single project architecture. Additionally, you can use the new project configuration wizard to create a new .NET MAUI app!

.NET MAUI demo app WeatherTwentyOne
.NET MAUI demo app WeatherTwentyOne

With .NET MAUI and Visual Studio, you only need one project in your solution to target mobile and desktop. Images, fonts, app information, and even splash screens can all be defined in one project and deployed to each platform at compile time. Using multitargeting, you can debug on any supported platform without having to maintain different projects for different target frameworks. To learn more about the new .NET MAUI Single Project architecture, you can watch the May 2021 Xamarin community standup!

.NET MAUI single project architecture
Target Android, iOS, Windows, and Mac from one project with .NET MAUI’s single project architecture.

To try out .NET MAUI today, download Visual Studio 16.11 and follow the instructions on the .NET MAUI samples repo to install the .NET 6 preview SDKs!

For more information, see .NET MAUI preview 4.

To experience the latest that Visual Studio 2019 has to offer, download the preview today. Don’t forget to report a problem or give us feedback on Developer Community!

33 comments

Discussion is closed. Login to edit/delete existing comments.

  • Jake Hayworth 0

    “Remove unused references” will be incredibly useful.

    • anonymous 0

      this comment has been deleted.

  • Robert Andrzejuk 0
    std::format(“STL is now C++{} feature-complete!”, version);

    needs to be assigned to something. For example

    auto ver_str = ....
  • Alex O 0

    When will we get a new Python version support in Visual Studio?

    The current version that ships with VS is 3.7.8
    3.7 has been out of support for a year.
    Even 3.8 is out of support now.
    The current version is 3.9.5

  • Teddy 0

    I can’t get “Remove Unused References” menu item show up. The option is enabled in “Tools > Options > Text Editor > C# > Advanced”. What is missing?

    • Hennadii Omelchenko 0

      Same here with ‘old’ csproj and ‘full framework’

      • Artem Grunin 0

        +1

  • Twissell Laban 0

    Any chance we will get git submodules support any time soon?

  • Mike Diack 0

    Please for goodness sake – as it’s a silent and breaking change, document the fact that the new version of the Visual C++ runtime (2015 to 2019) in this version silently breaks any existing code compiled for XP with (v140_xp) or (v141_xp) VS 2015 or VS 2017 compilers. The new runtime appears to install on XP, but breaks ANY XP build dynamically linked executable.

    I’ve raised bugs on this which have been stupidly shut down (I understand the technical reason – but you need to prevent the installer running on XP _AND_ document the fact that 14.29.29917 is the last XP compatible runtime). To silently release this with VS 2019 Update 10 and later, knowing full well it will break existing apps, AND not documenting this is maddening!

    Please take a look at this bug that you’ve ruled as not a bug – which frankly is RUBBISH. And for god’s sake document this as a known (unfixable) issue.

    https://developercommunity.visualstudio.com/t/xp-compatibility-broken-in-visual-c-runtime-2015-2/1406575

    Am furious yet again with your support staff.

    • Mahmoud SalehMicrosoft employee 0

      @Mike Diack,
      As you’ve already noted, this issue has been discussed elsewhere. We couldn’t continue XP support due to the removal of SHA-1 signing support across our product line. The alternative, SHA-2, is unavailable on Windows XP. Both mainstream and extended Windows XP support have been discontinued for several years now (https://docs.microsoft.com/en-us/lifecycle/products/windows-xp). However, I agree, additional documentation could help those still relying on it. We will provide more details in a separate write-up. We will also investigate preventing the VC Redist installer from running on Windows XP.

      • Leonidas Holdiman 0

        I wouldn’t call Windows XP fully unsupported, but “whenever an employee is bored” supported (basically unsupported).

  • Piotr Karczmarz 0

    Hot Reload for XAML and now for code is really good direction. It really reduces feedback loop and is very useful in certain scenarios.

    .NET MAUI: I had lately evaluated different cross-platform .NET desktop UI stacks for external clients and unfortunately .NET MAUI isn’t the first choice right now. Currently I don’t recommend using it for desktop apps because there is a better alternative – Avalonia which supports Windows, MacOS and also Linux.

    Jetbrains is migrating from WPF to Avalonia (dotmemory) and also others desktop-focused players like Mailbird. It’s pragmatic choice and I suspect this trend will continue unless .NET MAUI will have first class support for Linux.


    Piotr Karczmarz, CTO at ContextKeeper.io, building VS plugin allowing to instant jump to deep work via “mental snapshots”.

  • Brooks MYM 0

    very disappoint not to see vs 2022 preview 1 , can’t wait to try 64 bit new vs. maybe June…

  • Martin Ba 0

    All improvements are appreciated.

    How about improving on the offline installation and update experience?
    Maintaining a working offline installation plus(!) update(!) layout(s) for a decent sized developer team and CI server farm just drives my coworker insane.
    The VS installation “experience”, and esp. it’s automation, is probably the most freakin’ complicated one in whole marketplace!

    • Mike Diack 0

      Have to say I agree with this. While the new installer is significantly better than prior efforts, being able to easily maintain an offline installer as well is more difficult than it should be.

  • Kevin Gates 0

    While I’m excited about the changes, has anybody else noticed a slight lag and slowdown of intellisense and autocomplete after the update? I already made a report of it: https://developercommunity.visualstudio.com/t/Version-16100-Update-Slows-Down-Intell/1434887

    For me it appears to have happened in both Community and Enterprise editions.

    I also noticed a new bug with Sql Database projects where only one Design window can be loaded at a time: https://developercommunity.visualstudio.com/t/Visual-Studio-Lags-if-you-attempt-to-ope/1434901

  • David Kendall 0

    Not sure where to post this, but after the update, the create package wizard appears to be broken, I am downgrading and seeing if I can get it to work again. This is for UWP applications, in particular Windows IOT Core.

    • Grimm Lim 0

      My Uwp project ( bridge with desktopExtension) is facing a similar problem, too.

      Error Message below:
      The imported project “C:\Program Files (x86)\dotnet\sdk\5.0.101\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.NuGet.targets” was not found. Confirm that the expression in the Import declaration “C:\Program Files (x86)\dotnet\sdk\5.0.101\Sdks\Microsoft.NET.Sdk\Sdk\Sdk.NuGet.targets” is correct, and that the file exists on disk. C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\DesktopBridge\Microsoft.DesktopBridge.targets …

      So, downgrading … waste 3 hours..

      • Grimm Lim 0

        After downgrading to 16.9 , My UWP Works perfectly,

        Btw, is there any information (like Roadmap) of UWP with Reunion?

        Still using c# 7.3 and .netcore 2.x in 2021…
        Developing some lite solution on Win10 IoT Core, because .NetNative faster and use less energy than .Net Runtime, and MS have no any clear intention till now… SO SAD.

        Refer:
        https://github.com/microsoft/ProjectReunion/issues/105

        • anonymous 0

          this comment has been deleted.

  • Carlos Colon-Maldonado 0

    Showing branch names for the Current and Incoming branches during merge conflicts will be welcomed with open arms!

  • Erwin Mayer 0

    “This is just the start of our journey, and we will be looking to improve this experience further in Visual Studio 2022 and future versions of .NET 6+, such as the ability to use Hot Reload from Visual Studio when starting your application without a debugger (CTRL-F5), reducing the number of unsupported edits, enabling the ability to edit Razor pages, support for using Hot Reload with Blazor and .NET MAUI applications and more.”
    => So editing of Razor pages and Blazor it not supported? It’d be good not to show the Hot reload button if not supported, otherwise it is quite frustrating not to see any change.

  • UnhandledEx 0

    Thanks for your work guys! I have encountered a problem on parsing ISO-8601 date with nanoseconds:

    // Visual Studio 16.10, /std:c++latest
    void test()
    {
        std::istringstream input("2021-05-30T13:37:31.123456Z");
        std::chrono::sys_time tp;
        input >> std::chrono::parse(std::string("%FT%TZ"), tp);
        assert(!input.fail());
    }

    The sample works with the reference date library by @HowardHinnant.

    Do you have any plans on covering this scenario?

    • Miya NatsuharaMicrosoft employee 0

      Thanks for reporting this issue! I believe we have this work tracked in an issue in the MSVC STL open source repo, and one of our contributors has already opened up a PR with a fix. So yes, we have plans to address this use case and have a fix in progress!

  • Charalampos Mavridis 0

    After this update the visual studio hangs for few seconds every 1-2 minutes – I have report this as bug.

    I have try to remove almost everything from extensions and still nothing.

    I can not even work any more – please check this up.

    • anonymous 0

      this comment has been deleted.

  • Granger Godbold 0

    Any hope that the “Embedded commit details and file comparison in Git Repository window” functionality gets an option so it can be reverted to (the superior) pre-16.10.0 behavior? (I have no idea where to suggest such a thing; I don’t know which “voice” site works this week, or even if that paradigm has changed again.)

    1. I can no longer use my differencing engine of choice; the built-in one is significantly inferior to my external tool.
    2. Changing it a document-window instead of a docked tab adversely affects my workflow; it slows me down and makes things more confusing. When I view a commit or changes between 2 selected commits, it is a tangential/augmentative action, not axiomatic. Forcing it to overtake my main window pane (which is usually history) removes/hides contextual information from the UI, significantly complicates the [Ctrl]+[Tab] state. And depending on the situation, the mouse travel is greater, which increases physical RSI concerns with my hands (E.g. the diff area is horizontally limited now because it shares window pane space with the rest of the VS workspace layout).

  • Martin Erskine 0

    In any open code file windows I can move over to the icons above Solution Explorer to click on the (left arrow/right arrow) button which then shows me where the open code file I’m looking at, lives in the Solution. The Button is gone. I’m guessing it’s been removed. I use it regularly!

  • Richardson A.Silva 0

    Error MSB4018 The “ResolveTargetingPackAssets” task failed unexpectedly.

  • PPSC,FPSC Rana Aslam 0

    Thanks for sharing very useful information .
    Bigg Boss 15

Feedback usabilla icon