The Visual Studio 2019 Blog is the official source of product insight from the Visual Studio Engineering Team. You can find in-depth information about the Visual Studio 2019 releases in the following posts:
A remote code execution vulnerability exists when disposing metafiles when a graphics interface still has a reference to it. This vulnerability only exists on systems running on MacOS or Linux.
Issues Addressed in this Release of Visual Studio 2019 version 16.8.5
Fixed an issue where x86 Microsoft.VCLibs Appx installed under ExtensionSDKs updated with correct signature.
Fixed a memory leak when using C++ DesignTime features.
Fixed an issue where an exception would occur if a password is not remembered when importing an existing database into an SSDT project.
Fixed an issue where the publish button is disabled the first time customers publish .NET Core projects to a folder or other hosting targets.
Fixed a hang that occasionally occurred when developers opened the publish profiles view page.
CVE-2021-1651 / CVE-2021-1680 Diagnostics Hub Standard Collector Service Elevation of Privilege Vulnerability
An elevation of privilege vulnerability exists when the Diagnostics Hub Standard Collector incorrectly handles data operations.
CVE-2020-26870 Visual Studio Installer Remote Code Execution Vulnerability
A remote code execution vulnerability exists when the Visual Studio Installer attempts to show malicious markdown.
CVE-2021-1723 ASP.NET Core and Visual Studio Denial of Service Vulnerability
A denial of service vulnerability exists in the way Kestrel parses HTTP/2 requests.
Issues Addressed in this Release of Visual Studio 2019 version 16.8.4
Fixed an issue where C#-specific IntelliCode components may not be installed if IntelliCode had previously been installed from the Visual Studio Marketplace in older versions of Visual Studio
Transitive project references are now respected when a PackageReference projects references packages.config projects with PackageReference dependencies.
Adds Xcode 12.3 support.
Fixes x86_64 watchOS 7.0+ simulator support
We have fixed false positives (C33001 ~ C33005) for use of VARIANTs that is returned from a function.
Fix for intermittent VS crash in WinForms .NET Core designer while closing project or solution.
Fixed Database Project: Dragging a file from solution explorer into an opened one is deleting the file from the file system!
Fixed Clicking update on Sql Schema Compare does not save changes to sqlproj file
Fixed a bug where builds failed with errors "Table/column was not found".
Fix "commit after merge" checkbox from Team Explorer -> Branches.
Fixed an error where Visual Studio may become unresponsive for several seconds while checking for updates.
DeploymentAppRecipe.exe tool now supports running from any current directory. It also now returns non-zero return value whenever deployment fails and prints out error messages to standard error stream.
CVE-2020-17156 Visual Studio Remote Code Execution Vulnerability
A remote code execution vulnerability exists when Visual Studio clones a malicious repository.
Issues Addressed in this Release of Visual Studio 2019 version 16.8.3
Fixed an internal compiler error when a nested function template is defined outside of the parent class.
Fixed incorrect error C2355 when 'this' is used in the initializer of a non-static data member.
Ruleset loading error has been fixed for custom ruleset using /analyze:ruleset option with /analyze:rulesetdirectory and/or /analyze:projectdirectory option.
Fix for an intermittent crash in Visual Studio while using WinForms .NET Core designer.
.NET 5.0.1 insertion into Visual Studio v 16.8.3
Fixed an issue where some of the UI context activiated tool windows can cause Visual Studio to crash.
Fixed Push from Manage Branches page when there is no Git remote tracking branch.
Issues Addressed in this Release of Visual Studio 2019 version 16.8.1
Fixed a high-impacting issue where “The 'SourceExplorerPackage' package did not load correctly.” warning pops up when cloning a repo in Team Explorer. When users encountered this problem, it would cause the product to stop responding.
Visual Studio 2019 version 16.8.0
released November 10, 2020
Summary of What's New in this Release of Visual Studio 2019 version 16.8
F#:
F# 5 is now released alongside .NET 5
Performance improvements and fixes for Visual Studio tooling via F# Tools version 11.0.0
Compiler support for lambdas in unevaluated contexts
/debug:full link performance improved by multi-threading pdb creation. Several large applications and AAA games see between 2 to 4 times faster linking.
The Visual Studio debugger now has support for char8_t.
Added a new link option, legacy_stdio_float_rounding.obj to enable the legacy behavior of printing floating-point values, which was changed in Dev16.2 to properly round exactly representable floating-point numbers. For more details, please see printf, _printf_l, wprintf, _wprintf_l.
Roslyn analyzers are now included in the .NET 5.0 SDK
Refactoring that introduces the new C# 9 not pattern matching syntax when a suppression operator is present
Inline method refactoring to help replace usages of static, instance, and extension method within a single statement body
Code fix to convert instances of typeof to nameof in C# and GetType to NameOf in Visual Basic
C# and Visual Basic support for inline parameter name hints that inserts adornments for literals, casted literals, and object instantiations prior to each argument in function calls
Refactoring that extracts members from a selected class to a new base class in both C# and Visual Basic
Code cleanup has new configuration options that can apply formatting and file header preferences set in your EditorConfig file across a single file or an entire solution
Code fix to remove the in keyword where the argument should not be passed by reference
Refactoring that introduces the new C#9 pattern combinators and pattern matching suggestions such as converting == to use is where applicable
Code fix to make a class abstract when you are trying to write an abstract method in a class that is not abstract
IntelliSense completion in DateTime and TimeSpan string literals automatically appear when the first quote is typed
Code fix to remove unnecessary pragma suppressions and unnecessary SuppressMessageAttributes
Rename and Find All References understands references to symbols within the target string of global SuppressMessageAttributes
ByVal fades to say it's not necessary along with a code fix to remove the unnecessary ByVal in Visual Basic
Interactive window support for multiple runtimes, such as .NET Framework and .NET Core.
Added a new RegisterAdditionalFileAction API that allows analyzer authors to create an analyzer for additional files.
Add your Github account using the account management experience
In this release, the legacy Find in Files experience has been deprecated and all users are being moved to the new experience. The Editor team is working with folks who leave feedback in Developer Community who are experiencing issues with the modern Find in Files experience.
The ClickOnce publish provider is now available for .NET Core 3.1 and .NET 5.0 Windows Desktop Apps.
XAML Hot Reload Settings moved to "Debugging > Hot Reload"
Toolbox population from unreferenced NuGet packages
JavaScript/TypeScript:
The JavaScript/TypeScript debugger now supports debugging service workers, web workers, iFrames, and your page JavaScript all at the same time! In addition, the new debugging experience adds support for debugging your back-end node server applications and client-side JavaScript in the browser simultaneously. This feature is still experimental. You can enable the new debugging experience in the Debugging options menu
You can now trigger refactors anywhere they might be available by using the code action shortcut (ctrl + .). You don't even need to select any text - TypeScript is now smart enough to look around your cursor location for the best available refactors!
You can now fine tune which packages TypeScript searches for automatic import completion. This can lead to performance improvements in some projects with a lot of dependencies. For more details, please reference the TypeScript 4.0 (release notes)[https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html]
We added a message in the output pane showing which types we install to support intellisense. We recommend adding a tsconfig to your project to customize which types are used.
Please note we include the TypeScript 4.0 compiler and language service
A tampering vulnerability exists when the Python Tools for Visual Studio creates the python27 folder. An attacker who successfully exploited this vulnerability could run processes in an elevated context.
Issues Addressed in this Release
Fixed an issue where compiling in Visual Studio 2019 16.7 with the Intel C++ Compiler's 80-bit long double emits compiler errors, preventing projects from building.
Fixed an issue where Live Unit Testing would refuse to start in some scenarios.
.NET 5.0.RC2 added to Visual Studio 2019 v16.8 Preview 4
Fixed a bug where an occasional Git operation would begin and never finish.
Added additional functionality to Visual Studio Codespaces creation and connection.
Fixed a bug causing Visual Studio 2019 to crash or stop responding when closing or navigating away from ASP.NET Core solutions.
Fixed an issue where C++ project system would fail to load after uninstalling and reinstalling Visual Studio 2019.
Details of What's New in Visual Studio 2019 version 16.8.0
C++
C++20 Coroutines are now supported under /std:c++latest and the <coroutine> header. Support for our legacy behaviour is available under <experimental/coroutine> and the /await switch.
IntelliSense now provides support for C++20 <concepts> and <ranges> headers, and rename and browsing for concept definitions. There is a known issue that we expect to address in Preview 4.
Our STL now has support for the majority of C++20 Ranges. You can track our progress on our ranges GitHub issue.
We have upgraded the version of CMake shipped with Visual Studio to CMake 3.18.
Our code analysis tools now support the SARIF 2.1 standard: the industry standard static analysis log format. You can read more about the format SARIF format in the official specification.
Missing build tools in Linux projects will now issue a warning in the toolbar and a clear description of the missing tools in the error list.
You can now debug Linux core dumps on a remote Linux system or WSL directly from Visual Studio.
For C++ Doxygen comment generation, we added additional comment style options (/*! and //!).
As-you-type linter and fixups are now available in Visual Studio. Configure using Tools->Options->Text Editor->C/C++->CodeStyle->Linter + Fixups.
As-you-type linter
Debugger
.NET Core Linux core dump debugging support
Debugging managed Linux core dumps on Windows has been difficult realize until now, it would usually mean setting up another Linux environment that exactly mirrored production and then installing a set of tools for the analysis. Thankfully with Visual Studio 2019 16.8 preview 3 you can simply drag and drop a managed Linux core dump directly into your IDE and immediately start debugging.
.NET Auto Analysis
Asynchronous (async) programming has been around for several years on the .NET platform but has historically been difficult to do well. We have introduced managed memory dump analyzers that helps identify the following scenarios and anti-patterns:
Sync-over-Async
Threadpool exhaustion
.NET and .NET Core memory hot path auto analysis
This allows customers to intuitively view the dominating object types in their memory heap by using flame annotations in the Diagnostics Memory Tool window.
Fakes with SDK Style Projects Generate Shim Issues
When using the new Fakes support for SDK style projects some users encountered the following error when generating shims.
Cannot generate shim for System.DateTime: type is not supported because of internal limitations
A fix for this is released in 16.8 Preview 3. If you are using a 16.7.* release you can use the following workaround:
Add <FakesUseV2Generation>False</FakesUseV2Generation> to a PropertyGroup in your csproj file.
Add the <Fakes Include="Fakes\*.fakes" /> to an ItemGroup in your csproj file.
Add a reference to the generated Fakes assemblies in the ProjectDir/FakesAssemblies.
The new experimental Razor editor now supports the following Razor editing features:
Blazor light bulbs:
Extract to code behind*:
Create component from tag*
Add @using directive for component
Fully qualify component tag name
C# light bulbs
Add @using directive
Fully qualify type name
Enhanced Razor formatting
Rename Razor components in markup from .razor files
Go-to-definition on Blazor component tag names
C# hover colorization
C# completion toolitip colorization
Find All References in closed Razor files
Improved Razor editing preformance and stability for large projects and solutions
* Only works in local Razor scenarios, not supported yet in Visual Studio Codespaces or Live Share.
To enable the experimental Razor editor, go to Tools > Options > Environment > Preview Features, select Enable experimental Razor editor, and then restart Visual Studio.
Visual Studio 2019 IDE
Add your GitHub account using the familiar Visual Studio account management experience. The version control, integrated terminal and other features will then be able to leverage your account credentials to satisfy their GitHub authentication needs.
Adding GitHub accounts in Visual Studio
The ClickOnce publish provider is now available for .NET Core 3.1 and .NET 5.0 Windows Desktop Apps. To get started, right click on the project in Solution Explorer and select Publish, or select the Build > Publish <AppName> menu. ClickOnce can be found under the Folder Category.
ClickOnce Publish provider in Visual Studio
Git Productivity
Create a new branch from an Azure DevOps work item
Create a new branch from a work item
Open a Git repository from a list of your local repositories in the Git menu
List of local repositories in Git menu
The default source control provider is now Git instead of TFVC, which you can change from Tools - Options - Source Control
Single click to switch between branch histories in the Git Repository window
View and select from a list of solutions in your repo in Solution Explorer after opening a repository
Preview Feature toggle to show list of Views when opening a repo
List of Views in Solution Explorer
.NET Productivity
.NET compiler platform (Roslyn) analyzers inspect your C# or Visual Basic code for security, performance, design, and other issues. Starting in .NET 5.0, these analyzers are included with the .NET SDK. The analyzers are enabled, by default, for projects that target .NET 5.0 or later. You can enable code analysis on projects that target earlier .NET versions by setting the EnableNETAnalyzers property to true. You can disable code analysis for your project by setting EnableNETAnalyzers to false. You can also use the Project Properties window to enable/disable .NET analyzers. To access the Project Properties window right-click on a project within Solution Explorer and select Properties. Next, select the Code Analysis tab where you can either select or clear the checkbox to Enable .NET analyzers.
Project Properties window to enable .NET Analyzers
There is now a refactoring that introduces the new C# 9 not pattern matching syntax when a suppression operator is present. Place your cursor on the suppression operator. Press (Ctrl+.) to trigger the Quick Actions and Refactorings menu. Select Use pattern matching.
Refactoring introducing C# 9 not pattern matching syntax
There is now an inline method refactoring that helps you replace usages of a static, instance, and extension method within a single statement body with an option to remove the original method declaration. Place your cursor on the usage of the method. Press (Ctrl+.) to trigger the Quick Actions and Refactorings menu. Next select from one of the following options:
Select Inline <QualifiedMethodName> to remove the inline method declaration:
Inline Method refactoring removing declaration
Select Inline and keep <QualifiedMethodName> to preserve the original method declaration:
Inline Method refactoring preserving declaration
Creating a new C# or Visual Basic file from a template respects EditorConfig code style settings. The following code styles will automatically get applied when creating new files: file headers, sort using directives, and place using directives inside/outside namespaces.
There is now C# and Visual Basic support for inline parameter name hints that inserts adornments for literals, casted literals, and object instantiations prior to each argument in function calls. You will first need to turn this option on in Tools > Options > Text Editor > C# or Basic > Advanced and select Display inline parameter name hints (experimental). The inline parameter name hints will then appear in C# or Visual Basic file.
Inline Parameter Name Hints
You can now extract members from a selected class to a new base class with the new Extract Base Class refactoring. Place your cursor on either the class name or a highlighted member. Press (Ctrl+.) to trigger the Quick Actions and Refactorings menu. Select Pull member(s) up to new base class. The new Extract Base Class dialog will open where you can specify the name for the base class and location of where it should be placed. You can select the members that you want to transfer to the new base class and choose to make the members abstract by selecting the checkbox in the Make Abstract column.
Extract Base Class
Once you select Ok you will see the new base class added along with its members.
There is now a code fix to convert instances of typeof(<QualifiedType>).Name to nameof(<QualifiedType>) in C# and instances of GetType(<QualifiedType>).Name to NameOf(<QualifiedType>) in Visual Basic. Using nameof instead of the name of the type avoids the reflections involved when retrieving an object. Place your cursor within the typeof(<QualifiedType>).Name. Press (Ctrl+.) to trigger the Quick Actions and Refactorings menu. Next, select from one of the following options:
For C#, select Convert typeof to nameof:
Convert typeof to nameof
For Visual Basic, select Convert GetType to NameOf:
Convert GetType to NameOf
Code cleanup has new configuration options that can apply formatting and file header preferences set in your EditorConfig file across a single file or an entire solution.
Formatting and File Header support in Code Cleanup
There is now a code fix to remove the in keyword where the argument should not be passed by reference. Place your cursor on the error. Press (Ctrl+.) to trigger the Quick Actions and Refactorings menu. Select Remove ‘in’ keyword.
Remove `in` Keyword Code Fix
There is now a refactoring that introduces the new C#9 pattern combinators. Along with the pattern matching suggestions such as converting == to use is where applicable, this code fix also suggests the pattern combinators and, or and not when matching multiple different patterns and negating. Place your cursor inside the statement. Press (Ctrl+.) to trigger the Quick Actions and Refactorings menu. Select Use pattern matching.
Introduce C#9 Pattern Combinators
There is now a code fix to make a class abstract when you are trying to write an abstract method in a class that is not abstract. Place your cursor on the method error. Press (Ctrl+.) to trigger the Quick Actions and Refactorings menu. Select Make class ‘abstract’.
Make Class Abstract
In 16.7 Preview 1 we added IntelliSense completion in DateTime and TimeSpan string literals. In this release, this completion list automatically appears when the first quote is typed. In the past, it was required to type (Ctrl+space) to view this completion list. Place your cursor inside the DateTime or TimeSpan string literal and type the first double quote. You will then see completion options and an explanation as to what each character means. Both the date time format and an example will be provided.
IntelliSense Completion in DateTime and TimeSpan string Literals
This improvement also works for interpolated strings when you type a colon
There is now a code fix to remove unnecessary pragma suppressions and unnecessary SuppressMessageAttributes. Place your cursor on the pragma warning or the SuppressMessageAttribute. Press (Ctrl+.) to trigger the Quick Actions and Refactorings menu. Select Remove unnecessary suppression.
Remove Unnecessary Pragmas
Remove Unnecessary SuppressMessageAttributes
Rename and Find All References now understands references to symbols within the target string of global SuppressMessageAttribute suppressions.
Rename SuppressMessageAttribute
Find All References for SuppressMessageAttribute
Visual Basic had multiple ways of passing parameters, ByVal and ByRef, and for a long time ByVal has been optional. We now fade ByVal to say it's not necessary along with a code fix to remove the unnecessary ByVal. Place your cursor on the ByVal keyword. Press (Ctrl+.) to trigger the Quick Actions and Refactorings menu. Select ‘ByVal’ keyword is unnecessary and can be removed.
Visual Basic Remove ByVal Refactoring
There is now interactive window support for multiple runtimes, such as .NET Framework and .NET Core.
Interactive Window Support in .NET Core
There is a new RegisterAdditionalFileAction API that allows analyzer authors to create an analyzer for additional files.
Wrap Test Details Pane of Test Explorer
This highly requested feature allows the user to select text wrapping or leave the default text line alignment. When text alignment isn’t needed, wrapping can make the feedback from a test run much easier to view and eliminates the need for a horizontal scroll bar. You can enable this from the Test Explorer settings menu or the context menu of the Summary Pane.
Test settings menu
Wrap test details from the right-click context menu
XAML Tools (WPF, UWP, & Xamarin.Forms)
XAML Binding Failures diagnostic improvements
Developers working on WPF, UWP, WinUI and Xamarin.Forms projects must often detect and resolve XAML data binding failures in their applications. To improve the diagnostic tooling in this scenario we have added two new experiences to Visual Studio 2019 version 16.8 or newer:
XAML Binding Failure Indicator Icon: a new XAML Binding failure indicator icon is now present in the in-app toolbar for WPF and UWP projects and in the Live Visual Tree for all XAML projects including Xamarin.Forms. This icon will show a red indicator if at least one binding failure is detected. Clicking the icon will also take you to the new XAML Binding Failures window.
Binding Failure Icon (in-app toolbar)
XAML Binding Failures Window: the new XAML Binding Failures window is now available for WPF, UWP, WinUI and Xamarin.Forms projects. This new dedicated experience provides a rich user interface over the binding failure information that was previously only available in the Output Window. Improvements include the ability to see the failures as a set of columns that can be sorted, customized and are fully searchable. We have also grouped similar errors together limiting the noise that can occur during certain combination of data binding templates failures while still making all the original raw error information available and easily copyable through a right-click menu option. (note: requires Xamarin version 4.5.0.266-pre3 or higher)
Navigate to Source for binding failures: In partnership with the WPF team we have enabled the ability to navigate to source of a binding failures for those customers who are targeting WPF on .NET 5 (RC2 or newer).
XAML Binding Failure Window & LVT Icon
XAML Hot Reload
Xamarin.Forms “changes only” XAML Hot Reload now supports UWP: in this release we begin to rollout support for a highly requested feature that enables the new changes only XAML Hot Reload support in Xamarin.Forms Projects when targeting UWP. Please note this feature is still in development, and while editing XAML will now trigger updates in the running app other features such as in-app toolbar (element selection, etc.) are not yet fully implemented, but will be in a future release.
XAML Hot Reload Settings moved to “Debugging > Hot Reload”: In this release we have consolidated the XAML Hot Reload settings across WPF, UWP and Xamarin.Forms into a unified settings screen under “Debugging > Hot Reload”. We have also for the first time enabled the ability to disable or enable XAML Hot Reload on a per-platform basis to give you full control of when this feature is available. (Note: No settings will be changed during this migration so all your existing choices will continue to stay in effect just under this new location)
XAML Hot Reload Consolidated Settings
XAML Code Editor:
WinUI 3.0 IntelliSense Support: In this release we have enabled better IntelliSense support for developers building apps using the new WinUI 3.0 preview 3 or newer. To learn more about WinUI 3.0 see the documentation and to provide feedback visit the Windows UI XAML GitHub repo. Note: The latest WinUI 3.0 preview is recommended on 16.9 Preview 1 for the updated tooling experience.
Improving MVVM Support: When authoring a XAML document, you can set d:DataContext to get accurate binding IntelliSense for the XAML document. In the past, manually specifying the data-context type was cumbersome; you had to leave the XAML document, find the desired view-model type, copy and paste its namespace and name into the d:DataContext declaration.
In this release we’re introducing a new feature that allows you to quickly declare a d:DataContext via a lightbulb that suggests possible view-model candidates.
XAML IntelliSense for MVVM d:DataContext
Extensibility
Toolbox population from unreferenced NuGet packages: In this release we have added support for TargetFrameworkMoniker-specific VisualStudioToolsManifest.xml files when populating Toolbox with controls from unreferenced NuGet packages. So, for example, your package could expose different sets of controls to .NET Core 3.1 and .NET 5.0 projects.
We would love to hear from you! For issues, let us know through the Report a Problem option in the upper right-hand
corner of either the installer or the Visual Studio IDE itself. The icon is located in the upper right-hand corner.
You can make a product suggestion or track your issues in the Visual Studio Developer Community, where you can ask questions, find answers, and propose new features.
You can also get free installation help through our Live Chat support.
Blogs
Take advantage of the insights and recommendations available in the Developer Tools Blogs site to keep you up-to-date on all new releases and include deep dive posts on a broad range of features.