Visual Studio 2017

Microsoft has released a major update to Visual Studio 2017 in the form of version 15.6. Visual Studio 2017 version 15.6 focuses on new features, productivity improvements, and other enhancements that address our customers’ feedback.

This fourth preview builds upon the third preview of Visual Studio 2017 version 15.6 and contains new features, bug fixes, and other enhancements that address your feedback.

You can update to Visual Studio 2017 version 15.6 by opening the Visual Studio Installer and clicking ‘Update’.

What’s New in this Release

IDE Setup

  • We’ve streamlined the update process by having the update notification in Visual Studio take you directly to the installer, instead of Extensions and Updates.
  • The workloads “ASP.NET and web development” and “.NET Core cross-platform development” have been updated to include “Cloud tools for web development”. This component comprises of everything needed to consume Azure Functions from within Visual Studio.


    When updating from 15.6 Preview 3 to Preview 4 or greater, the computer may restart automatically without notifying or confirming with the user.

IDE Shortcut

We added Ctrl+D as the shortcut for Edit.Duplicate in the default keyboard mapping. The previous chord (Ctrl+E, V) still works, and is available in all keyboard mapping schemes


UI Responsiveness Notifications

In order to provide more transparency around extensions’ impact on performance and reliability, Visual Studio performs real-time analysis to determine whether an extension is likely to have caused unresponsiveness. If an extension is determined to have caused the hang, Visual Studio will display a notification which allows the user to disable the suspect extension or suppress future notifications for that extension (Figure 1).

UI Responsiveness notification with option to disable
(Figure 1) UI Responsiveness notification with option to disable the extension or suppress future notifications

.NET Core Solution Load

In this Preview, we focused on .NET Core and according to our lab measurements, customers can expect 20% faster solution load times on average.

Debugging and Diagnostics

CPU Usage Tool

The CPU Usage tool can display logical call stacks for asynchronous code (aka ‘Async Call Stack Stitching’).

  • To see logical call stacks (i.e. ‘stitched call stacks’), turn on the “Stitch Async Code” setting in the Filter drop-down menu of the CPU Usage tool.
  • Asynchronous code running on behalf of a parent function or Task will appear as a child in the Call Tree and Caller/Callee views.
  • This change makes it easier to navigate asynchronous code and understand its performance characteristics.


    This feature can take a long time to produce the logical call stacks for some async code patterns. You can cancel the analysis and turn off the setting if necessary. This behavior is only available during post-mortem style profiling using the ALT-F2 Performance Profiler launch page. When the CPU Usage tool is used during debugging, it does not shows logical call stacks.

Logical Call Stack Tree with Call Stack Stitching in effect
(Figure 2) Logical Call Stack Tree with Call Stack Stitching in effect

.NET Productivity

Visual Studio Web Tools

  • Solution Explorer has a new capability for .NET Core projects called “file nesting”, which allows users to control how related files appear in Solution Explorer.
  • The project publishing experience has been updated.
  • In the New Project dialog:
    • the drop-down that let’s you pick a version of .NET Framework has been moved to the bottom of the dialog and no longer acts as a filter for the template.
    • for the node “Web”, the sub-node “Web Site” has been renamed to “Previous Versions”.
  • The debug drop-down for WebForms and MVC 5 projects:
    • now allows users to select the Snapshot Debugger for Azure App Service deployed apps.
    • has been updated to have the same browser selection gesture as ASP.NET Core projects.

Configure Continuous Delivery Tools

For solutions under source control, you can now click on the “Continuous Delivery” tile in Team Explorer to configure automated build and deployments for your application.


Mapfile generation overhead is reduced in full linking scenarios. We still recommend using PDB files instead of mapfiles.

F# Compiler and Tooling Improvements

Preview 4 introduces full support for file ordering and initial support for multi-targeting with F# and .NET Core SDK projects, and also some critical fixes for the F# compiler.

Compiler and Core Library Changes

  • A regression in System.Tuple types defined in F# code no longer supporting .Item1/.Item2/etc. has been fixed. Because these tuple types are now 100% synonymous with F# tuple syntax, we introduce a warning when using these properties. See the linked pull request for more details.
  • Two regressions and another bug fix in inference order for Statically Resolved Type Parameters have been fixed by Gustavo Leon.
  • The IsSerializable property for F# types in FSharp.Core for .NET Standard has been enabled. F# types such as Option and Async are now serializable for .NET Standard and .NET Core.
  • The FSharp.Core package has been updated to version 4.3.3 and includes all changes for this release and Preview 3.

F# Tooling Improvements

  • Support for multi-targeting of F#/.NET Core SDK-based projects is now implemented.
  • File ordering for .NET Core SDK-based projects is implemented, including Add Above/Below, folder support, and the Visual Studio UI updating without needing to reload a project.
  • Bug fixes and performance improvements, by Eugene Auduchinok and Microsoft.
  • Code surrounded by #if INTERACTIVE defines now support IDE features which do not require type checking, by Eugene Auduchinok.
  • An inadvertent reversion of a fix for empty “New file” window on older F#/ASP.NET (.NET Framework) projects has been fixed by Loïc Denuzière.

F# infrastructure and OSS repo improvements

  • Satellite assemblies and FSharp.Core.resources.dll are now included in the F# compiler SDK.
  • The compiler is now prevented from rebuilding itself in the Visual F# codebase if assembly info has not changed.
  • ToString() is implemented for FSharpSymbolUse to make it easier to look at all symbol use results when debugging editor tooling, by Eugene Auduchinok.