Visual Studio 2019 version 16.5 is now available

Jacqueline Widdis

The Visual Studio 2019 team here in Redmond has been living under a perpetually grey, wet winter sky since our last minor release. Thankfully, we are beginning to see the sun making regular appearances.  It is our hope this newest release will also brighten your day. Visual Studio 2019 version 16.5 contains anticipated new features from XAML, .NET, C++ and Debugging.  In addition, we have addressed several issues found in our Preview releases. We believe this combination is ready to make your developer journey more productive. If you have any additional ideas to contribute to our product, we invite you to participate in our Developer Community forum.

While I elaborate, why not download our latest version to try for yourself? Also keep in mind, a more complete list of all changes are available in the Visual Studio 2019 release notes.

.NET Mobile Development

Our first feature to discuss is XAML Hot Reload for Xamarin.Forms. This feature speeds up your development and makes it easier to build, experiment, and iterate over your mobile app’s user interface. How? You do not need to rebuild your app each time you tweak your UI as changes instantly show while the app is running! Because this updates as you make changes, if you have interacted with the application, the state of the application is not lost as you make the changes.  Consequently, you do not have to recreate the repo as you previously did. That’s pretty exciting, isn’t it?

We heard lots of feedback on a specific need shared via Developer Community Suggestions.  Due to the fact, you wanted to see changes made to your XAML reload instantaneously on multiple targets such as an iOS simulator and Android emulator, so we have added that capability.

 .NET Productivity

To help with .NET Productivity several features ship in this Visual Studio 2019 version 16.5 release.

First of all, you can convert if statements to switch statements or switch expressions. To do this, place your cursor on the if keyword. Press Ctrl+. to trigger the Quick Actions and Refactorings menu. Finally, select Convert to ‘switch’ statement or Convert to ‘switch’ expression.

Image convert if to switch statement
Convert if to switch statement in Visual Studio 2019.


Furthermore, IntelliSense now supports completion for unimported extension methods. To access this ability, you will need to enable this option in Tools > Options > Text Editor > C# > Intellisense > and select Show items from unimported namespaces(experimental).

Simplify Interpolation

Additionally, we added the ability to simplify string interpolation refactoring. This will help make your string interpolation more legible and concise. Place your cursor on the string interpolation. Press Ctrl+. to trigger the Quick Actions and Refactorings menu and select Simplify interpolation. 

Simplify interpolation
You can Simplify Interpolation through the Quick Actions and Refactorings menu.


The Extract local function refactoring allows you to turn a fragment of code from an existing method into a local function. Highlight the code you want extracted. Press Ctrl+. to trigger the Quick Actions and Refactorings menu and select Extract local function. 

Extract local function
You can Extract Local Function through the Quick Actions and Refactorings menu

The make members static code fix helps improve readability by making a non-static member static. Place your cursor on the member name. Press Ctrl+. to trigger the Quick Actions and Refactorings menu and select Make static. 

Make a member staticv
You can make a member static through the Quick Actions and Refactorings menu.


Profiling is an excellent tool for identifying performance issues in your code. You can now profile a .NET Core test. To do so your .NET Core projects must be configured to generate full PDB’s. We also recommend upgrading to a minimum version of 16.4 for the Microsoft.Test.SDK. This will enable you to profile tests in both x86 and x64 architecture settings. To profile a test, select Profile from the context menu in the Test Explorer. Test profiling is supported through static instrumentation and Performance Explorer (.vsp) document in Visual Studio.

Debugging in C++ and .NET

Pinnable Properties has been a popular tool for managed code debugging. Specifically, this allows quick visibility of an object’s property without the need of drilling into an object. This feature is now available in C++ for DataTips and the Autos, Locals, and Watch windows.  To use the tool, hover over a property and select the toggle-able pin icon that appears or select the Pin Member as Favorite option in the context menu, bubbling your selected property to the top of your debugger display. 

Pinnable Properties in Debugger
Pinnable Properties tool in Debugger

We’ve also added a new capability to assist you in debugging multithreaded applications.  This helps avoid struggling to determine the source of a deadlock or other thread-related bugs. Subsequently, you can now view which managed thread is holding a .NET object lock in the Call Stack window, Parallel Stacks window and the location column of the Threads window. 

Call Stack Window
.NET Object lock in the Call Stack window, Parallel Stacks window

In a previous update, we made it possible to debug processes running in Docker Linux containers. Now, you can do the same in Docker Windows containers. To give this at try, attach and debug that .NET Framework, .NET Core, and C++ process in the Attach to Process window by selecting the Docker (Windows Container) connection type.   

Docker Window Container
Docker Window Container Process

Finally, for developers building applications on top of the Open Enclave SDK we’ve added debugging support in Visual Studio 2019 version 16.5. So, you can now debug those applications from within the product, for more information, go to 

Image 165GAdockerwindow2




.NET Object Allocation Tool

The .NET Object Allocation tool has been updated with changes aimed to help you visualize your data more easily and reduce the time you spend on memory investigations.  

First, the backtrace view has been moved to a separate panel to enable you to more easily distinguish between the allocation type and the functions within the type being called. Additionally, when an allocation type is selected the call tree is oriented from the leaf to root node to more quickly see what specific function is allocating the most memory and needs to be changed. Lastly, a new average size column has been added both to the allocation type panel and backtrace view. This information is helpful if you are trying to investigate what allocation types or functions are taking up a lot of memory per allocation. Furthermore, all of these columns are sortable and can be toggled on or off so that you can customize the tables to look the way you want. 

Also, take notice of the new icons added to the allocation, call tree, and functions view, so it is easier to visualize the classes and structures being allocated. The two icons represent value types (blue) and reference types (yellow). By the way, a number of other user experiences such as more icons and performance improvements are coming soon to Visual Studio! 

.NET Object Allocation Tool
.NET Object Allocation Tool


C++ Improvements in Visual Studio 2019 version 16.5

Visual Studio 2019 version 16.5 brings several improvements to the C++ cross-platform and CMake development experience. Starting with this release, you’re now able to interact with your stored remote connections over the command line. This is useful for tasks such as provisioning new development machines or setting up Visual Studio in continuous integration. 

Interact with stored remove connections through the Developer Command Prompt
Interact with stored remove connections through the Developer Command Prompt

In addition, this release brings the ability to leverage native support for Windows Subsystem for Linux when separating your build system from a remote deploy machine, allowing you to build natively on WSL and to deploy the build artifacts to a second remote machine for debugging. This workflow is supported by both CMake projects and MSBuild-based Linux projects. 

Visual Studio version 16.5 makes it easier than ever to work with CMake projects in Visual Studio. Specifically, this release brings the ability to add, remove, and rename source files and targets in your CMake projects from the IDE without manually editing your CMake scripts. When adding and removing files with the Solution Explorer, Visual Studio will automatically edit your CMake project. Furthermore, you can also add, remove, and rename the project’s targets from the Solution Explorer’s Targets View, as shown below. You can learn more about this and related features at the C++ Team Blog. 

Add, remove, and rename source files in CMake projects
Add, remove, and rename source files in CMake projects

New CMake code navigation features such as Go To Definition and Find All References make it easier to explore and understand complex CMake projects. The navigation feature supports variables, functions, and targets in CMake script files. They work across your entire CMake project to offer more productivity than naïve text search across files and folders. Also, they are integrated with other IDE productivity features such as Peek Definition. 

Download Visual Studio 2019 version 16.5 Today!

As you can see, Visual Studio 2019 version 16.5 gives plenty of new functionality to help you with your development projects. Give it a try today and tell us what you think.

Additionally, if you would like to try out future features, check out our Preview channel to give our next product iteration a try. This Preview release brings additional changes to WFT/UWP Tooling, JavaScript/TypeScript, and Web Tooling. The version 16.6 Preview 1 release notes give full details about each of these features.

As always, we look forward to your feedback!