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

Leave a comment