Visual Studio Icon Visual Studio 2017 version 15.8 Release Notes

| Developer Community | System Requirements | Compatibility | Distributable Code | License Terms | Blogs | Known Issues |


If you are accessing this page from a non-English language version, and want to see the most up-to-date content, please visit this Release Notes page in English. You can change the language of this page by clicking the globe icon in the page footer and selecting your desired language.

Click a button to download the latest version of Visual Studio 2017. For instructions on installing and updating Visual Studio 2017, see the Update Visual Studio 2017 to the most recent release. Also, see instructions on how to install offline.

Visit the page to download other Visual Studio 2017 products.

What's New in 15.8

The Visual Studio Blog is the official source of product insight from the Visual Studio Engineering Team. You can find in-depth information about the Visual Studio version 15.8 releases in the following posts:

Visual Studio 2017 version 15.8 Releases


Visual Studio 2017 version 15.8 Security Advisory Notices

Summary of Notable New Features in 15.8

Top Issues Fixed in 15.8

These are the customer-reported issues addressed in 15.8:

See all customer-reported issues fixed in Visual Studio 2017 version 15.8.

The Developer Community Portal

Details of What's New in 15.8

Release Notes Icon Visual Studio 2017 version 15.8.0

released on August 14, 2018

New Features in 15.8


You now have the option to download all installation files before starting your installation.

  • To use this new option, select the "Download all, then install" option in the installer (Figure 1). We suggest this option if you have a slower internet connection.
  • The default option remains "Install while downloading", which downloads and installs in parallel.
Download Otion
(Figure 1) Download Option


This release contains the following performance improvements:

  • Branch switching for C#, VB, and C++ projects is much faster for large solutions since solution reload is no longer required.
  • We reduced the time to unload and reload a small set of C# and VB projects in large solutions from minutes to several seconds.
  • We added an option to disable reopening documents that were open in the previous session, as reopening certain types of files or designers can delay solution load.
    • Toggle this option in Tools > Options > Projects > Solutions > General.

Test Performance

We significantly improved performance when running a few tests in a large solution with multiple test projects. In our labs, a solution with over 10,000 MSTests executed a single test up to 82% faster!

Visual Basic Performance Improvement

Visual Basic now provides a significant performance improvement when using the pattern CInt(Fix(number)) to convert from non-integer types to integers.

Performance Profiling

This release contains the following performance profiling enhancements:

  • We added the capability to start profiling in a paused state:

    • The CPU Usage tool in the Performance Profiler (ALT-F2) can now be started in a paused state (Figure 2). This can be useful while waiting for a scenario worthy of a CPU Usage investigation. If CPU usage collection is disabled at startup, the Performance Profiler will not collect any CPU usage sample stack data until it is specifically enabled. This results in a smaller amount of data to collect and analyze, thus making your performance investigations more efficient.

    • To start a session with CPU Usage sample collection disabled, click the gear icon next to CPU Usage on the Performance Profiler launch page. On the CPU Usage property page, uncheck Enable CPU Profiling (Sampling) and click OK to save the settings.

      CPU Usage Tool settings page
      (Figure 2) CPU Usage Tool Settings
    • Once you start the target application (click Start on the Performance Profiler launch page), you will see the CPU utilization graph (Figure 3) which allows you to control CPU profiling. To enable CPU usage sample stack data collection, select Enable CPU profiling in the middle of the view, or click Record CPU Profile just below the CPU utilization graph. You can click Record CPU Profile to enable/disable sample data collection as many times as you like. The CPU utilization graph color changes to indicate whether sample collection is enabled/disabled at that point in time.

      CPU Usage Tool monitoring view
      (Figure 3) CPU Usage Utilization Graph
  • We added a .NET Object Allocation Tracking tool:

    • The .NET Object Allocation Tracking Tool joins the family of tools available from the Performance Profiler. Invoking this tool for a performance profiler session initiates the collection of a stack trace for every .NET object allocation that occurs in the target application. This stack data is analyzed along with object type and size information to reveal details of the memory activity of your application. You can quickly determine the allocation patterns in your code and identify anomalies. In addition, for Garbage Collection (GC) events, you can easily determine which objects were collected and retained and quickly identify object types that dominate the memory usage of the application.
    • This is especially useful for API writers to help minimize allocations. Many applications will overrun the buffer limits involved in the diagnostics data collection, but small test applications exercising an API's key scenarios can be diagnosed quite well. While your test application is executing, the Performance Profiler displays a line graph of Live Objects (count), as well as an Object Delta (% change) bar graph.
    • To use the .NET Object Allocation Tracking Tool, display the Performance Profiler launch page (Figure 4), select a target to profile (the default target is the startup project in the solution), check .NET Object Allocation Tracking under Available Tools, then click Start.
    Performance Profiler launch page
    (Figure 4) Performance Profiler Launch Page

Performance Profiling (CPU Usage)

This release contains the following improvements to the CPU Usage tool of the Performance Profiler (available through ALT-F2):

  • The Call Tree view now displays asynchronous execution by logical call stack by default. You can turn off this behavior by unchecking the optionStitch Async Code in the Filter dropdown of the CPU Usage main view.
  • We added a Modules/Functions view that displays performance information by module (dll) and by function within a module. One can display the Modules/Functions view from the context menu available when selecting a function in the CPU Usage main view, or from the View dropdown in the Call Tree or Caller/Callee views.
  • Instance indication has been added to the CPU Usage graph in the CPU Usage tool's main view. You can view the instances when a function is executing (for instance, on the stack) by double-clicking a function listed in any of the CPU Usage views.


This release contains the following productivity enhancements:

  • You can perform additional code cleanup with Format Document (Ctrl + K, D or Ctrl + E, D) for C# development. Configure cleanup by going to Tools > Options > Text Editor > C# > Code Style > Formatting > General.
  • We added more refactorings and quick actions using Ctrl + . or Alt + Enter:
    • Invert If enables you to invert your logic in if-else statements. Place your cursor in the if keyword to trigger this refactoring.
    • Add parameter from method callsite allows you to add a parameter to a method by adding an argument to a method callsite and triggering Quick Actions and Refactorings.
    • Remove unnecessary parentheses removes parentheses around binary operators that are not essential for compilation. You can configure this style rule through Tools > Options > Text Editor > C# > Code Style > General or .editorconfig:
      • dotnet_style_parentheses_in_arithmetic_binary_operators
      • dotnet_style_parentheses_in_relational_binary_operators
      • dotnet_style_parentheses_in_other_binary_operators
      • dotnet_style_parentheses_in_other_operators
    • Use ternary conditionals in assignments and return statements can also be configured as a style rule in Tools > Options > ... or through .editorconfig:
      • dotnet_style_prefer_conditional_expression_over_assignment
      • dotnet_style_prefer_conditional_expression_over_return
  • We added new commands and improvements to the Go To All window:
    • Go to Enclosing Block (Ctrl + Alt + UpArrow) allows you to quickly navigate up to the beginning of the enclosing code block.
    • Go to Next/Previous Issue (Alt + PgUp/PgDn) allows you to skip to the next/previous issue (error, squiggle, lightbulb).
    • Go to Member (Ctrl + T, M) is now scoped to the file by default. You can change the default back to solution by toggling the Scope to Current Document (Ctrl + Alt + C).
  • You can now create insertion points and selections at multiple, arbitrary locations in a file with multiple caret support. This allows you to add, edit, or delete text in multiple places simultaneously.
    • Insert carets with Ctrl + Alt + LeftMouseClick.
    • Add a selection and caret at next location that matches current selection with Shift + Alt + Ins.
    • See Edit > Multiple Carets for full list of actions.
  • Access a contextual navigation menu with Alt + `.
  • Keep your keybindings consistent with two new keyboard profiles: Visual Studio Code and ReSharper (Visual Studio). You can find these schemes under Tools > Options > General > Keyboard and the top drop-down menu.


This release contains the following debugging enhancements:

  • When you have more than one instance of Visual Studio 2017 installed, you can now select which instance to deploy your extension to when debugging (Figure 5). That way you can, for example, develop in the Visual Studio release channel while debugging in the preview channel.

    Select your debug instance
    (Figure 5) Select Debug Instance
  • You can now attach the Snapshot Debugger directly from the Publish summary page (Figure 6).

    Attach Snapshot Debugger from Publish Summary page
    (Figure 6) Attach Snapshot Debugger from Publish Summary
  • We now support viewing Managed Tasks through the Tasks window while debugging minidumps with heap.

Tools for Universal Windows Platform Developers

We made many important improvements to the XAML designer for projects targeting the Universal Windows Platform with a target platform version of the Windows 10 Fall Creators Update (build 16299) or later. These improvements include:

  • You can now edit collections in the Property Inspector.
  • The designer now allows Templates and Styles to be edited, including when the definitions for those entities are defined in other documents.
  • Properties of type IconElement (such as Icon in an AppBarButton) now have a custom editor in the Property Inspector making these properties easier to set.
  • The designer, editor, and Edit and Continue should all now work correctly with x:DefaultBindMode.
  • The Visual State Manager experience in Blend now supports AdaptiveTrigger.

F# 4.5 and F# Tools for Visual Studio

We introduced the F# language version 4.5 with this release. This also corresponds with the new 4.5.x family of FSharp.Core (the F# core library). You can read the specs for each of these changes in the F# RFC repository. There are also many improvements to F# tools for Visual Studio with this release.

F# 4.5

Here are the some of the highlights with the F# language version 4.5:

Span<'T> support

We implemented Span<'T> and related features so that effective consumption and production of APIs using Span, Memory, and ref-like constructs are possible with F#. The features for this include:

  • New voidptr type.
  • New NativePtr.ofVoidPtr and NativePtr.toVoidPtr functions in FSharp.Core.
  • New types inref<'T> and outref<'T>, which are read-only byrefs and write-only byrefs, respectively. This correspond to in ref and out ref in C#.
  • The ability to produce ByRefLike structs (such as Span and ReadOnlySpan).
  • The ability to produce IsReadOnly structs.
  • Implicit dereference of byref- and inref-returns from methods.
  • The ability to produce extension members on byref/inref/outref.

This feature set fixes a bug in the initial design of byref-returns in F# 4.1, where functions, methods, and properties returning byref's were not implicitly dereferencing the return value. We make this change to bring the feature in-line with how C# handles ref-returns. An error message is used when a type annotation indicates that an implicit dereference of a ref- return is now used.

Additionally, this feature set also fixes a bug in the F# compiler where "Evil struct replacement" was possible; i.e., calling a method on an F# struct could replace the actual struct that was called with a different one. The this parameter on a struct is now considered an inref<MyStruct>, with an error that suggests you add a mutable field if you wish to modify the struct.

You can learn more about span and ref-like constructs in the RFC for this feature set.

Match! in computation expressions

F# 4.5 introduces match!, a new keyword for use within computation expressions, contributed entirely by John Wostenberg. This syntactic sugar is equivalent to a let! followed by a match on the result. You can learn more in the RFC for match!.

Relaxing the need to upcast with yield in sequence, list, and array expressions

F# 4.5 now relaxes some cases where an upcast when using yield was required to convert a subtype into a supertype. This restriction was already not necessary for these expressions since F# 3.1 when not using yield, so this makes things more consistent with existing behavior. You can learn more in the RFC for this feature.

Permitting indentation on list and array brackets

F# 4.5 now relaxes the indentation rule for list and array brackets that required them to be indented one scope forward when on their own line. This previous requirement has always been quite confusing, especially for beginners to F#. Additionally, it is not required for F# sequence expressions. This now brings array and list expressions to the same consistent state as sequence expressions. You can learn more in the RFC for this feature.

Enum cases emitted as public

F# 4.5 now emits enumeration cases as public under all circumstances, to align with how C# emits enumeration cases. This also makes it easier for profiling tools to analyze logs from F# code, where the value rather than the label name was emitted. You can learn more in the RFC for this feature.

F# Compiler Improvements

Improvements to the F# compiler in addition to the previously-mentioned language features are in F# 4.5. These include:

  • We improved compiler performance work by removing up to 2.2% of all allocations in the F# compiler (under various scenarios).
  • We fixed a bug that results in an AccessViolatioNException when using yield! with struct-based enumerables.
  • It is now possible to inherit from FSharpFunc again.
  • Tail calls are disabled by default for debug builds of F# for .NET Core. They are enabled for release, thus matching the desktop F# compiler.
  • F# reference normalization has been fixed to allow you to control transitive assembly references written to an output file. This allows you to perform the equivalent of assembly redirection on .NET Core.
  • We fixed a bug where the error message used when attempting to use dynamic invocation on inline functions was ignored. The error message now propagates.
  • F# now respects the WarningsNotAsErrors flag that you can set in project files.
  • When branches of a pattern match do not return the same error message type condition, has been updated to be friendlier by Isaac Abraham.
  • An internal error bug when a compiling interface implementation that lacks an overloaded method implementation has been fixed by Steffen Forkmann.
  • Some unnecessary array copying in the lexing phase of the compiler has been removed by Gauthier Segay.
  • Incomplete pattern matches on F# enumerations now produces a detailed warning that gives an example of a case not covered, contributed by John Wostenberg.
  • `#nowarn "2003" is now respected, contributed by Matthias Diitrich.
  • A bug where consuming C# extensions methods could fail in F# overload resolution has been fixed by Steffen Forkmann.
  • An internal QueueList data structure bug was fixed by Steffen Forkmann.
  • Various smaller optimizations and code cleanup efforts were contributed by Steffen Forkmann, Eugene Auduchinok, and ncave.

F# Core Library 4.5.x

The following additions to the F# Core Library are now available:

  • Significant work has been done to improve stack traces for async { } computation expressions. You should now be able to see user code and user line numbers in stack traces. You can learn more in the RFC for this feature.
  • FuncConvert.FromFunc and FuncConvert.FromAction APIs that type System.Func and System.Action overloads, to help in interoperation with C#. You can learn more in the RFC for this feature.
  • ValueOption is a new type available, which is the first in a set of future features ultimately aimed at better performance for Active Patterns. You can learn more in the RFC for this feature.
  • TryGetValue is now a new member on the F# Map type. You can learn more in the RFC for this feature.
  • We fixed High CPU usage upon the first invocation of MailboxProcessor.TryReceive.
  • Comparison for bool now uses fast generic comparison, contributed by Vasily Kirichenko.
  • The summary text for Array.allPairs has been updated to be correct, contributed by Patrick McDonald

F# Tooling Improvements

Significant improvements in the F# tools, such as performance enhancements and some new editor features are included this release. As always, with a large number of contributions from the F# open source community. Here are the highlights:

  • We improved IntelliSense performance for .NET SDK-style projects of all forms, including those that use multi-targeting.
  • A community-driven effort to analyze and improve IntelliSense performance for very large files was contributed by Vasily Kirichenko, Steffen Forkmann, and Gauthier Segay. IntelliSense in very large files (10k+ lines of code) is roughly twice as fast now.
  • The warning for an outdated FSharp.Core (despite the package being installed) is no longer present in .NET SDK-style projects.
  • The description tooltip that displays XML documentation for a member after . in IntelliSense no longer times out after 10 seconds.
  • A bug where you could not set breakpoints in object constructor arguments has been fixed.
  • A bug where a renamed symbol would be duplicated when it is a generic parameter has been fixed.
  • Templates for .NET Framework (classic F# templates) now consume FSharp.Core from a NuGet package, to align with .NET SDK F# templates.
  • Automatic, transactional brace completion is now available for (), [], {}, [||], and [<>] brace pairs. We did this work in collaboration with Gibran Rosa.
  • You can now go to definition with Ctrl + Click on an F# symbol. The settings for this gesture are also respected in the Tools > Options window.
  • The IntelliSense performance UI has been modified to allow configuration of stale typecheck information for various IDE features. Explanations for each option are now present in tooltips for the settings.
  • Brace match highlighting now correctly highlights braces, completed in collaboration with Vasily Kirichenko.
  • Go to definition now navigates correctly when a type is defined recursively, contributed by Vasily Kirichenko.
  • A bug where an auto-imported namespace wasn't opened when the top of a file was empty has been fixed by Vasily Kirichenko.
  • A bug where printf specifiers that contained dots were miscolored has been fixed by Vasily Kirichenko.
  • A bug where all opens were considered unused inside of a recursive module has been fixed by Vasily Kirichenko.
  • The performance of the Unused Opens analyzer has been improved significantly by Vasily Kirichenko.
  • Autocompletion for attributes now only suggests options that are actually attributes, contributed by Vasily Kirichenko.
  • Signature Help tooltips are now generated for Type Provider static parameters at the constructor call site, contributed by Vasily Kirichenko.
  • A bug where value types used as units of measure were colored as reference types has been fixed by Vasily Kirichenko.
  • A bug where semantic colorization could disappear for some files while scrolling has been fixed by Vasily Kirichenko.
  • There is now an experimental CodeLens implementation, contributed by Victor Peter Rouven Müller. You can turn it on in Options > Text Editor > F# > Code Lens.
  • A bug where the F# compiler service would incorrectly elide the module names in XML documentation has been fixed by Sebastian Urban.
  • Code that uses Dictionary with ContainsKey and subsequent Item calls has been changed to use TryGetValue, by Eugene Auduchinok.
  • Jakob Majoka also contributed in the process of consuming a different API for Tooltips.

Infrastructure, Packaging, and Open Source Improvements

We made the following enhancements to infrastructure, packaging, and our open source contribution experience:

  • The F# compiler distributed with Visual Studio no longer installs as a singleton in the F# Compiler SDK location. It is now fully side-by-side with Visual Studio, meaning that side-by-side installations of Visual Studio will finally have truly side-by-side F# tooling and language experiences.
  • The FSharp.Core NuGet package is now signed.
  • ETW logging has been added to the F# tools and compiler.
  • The very large control.fs/contro.fsi files in FSharp.Core have been split into async.fs/async.fsi, event.fs/event.fsi, eventmodule.fs/eventmodule.fsi, mailbox.fs/mailbox.fsi, and observable.fs/observable.fsi.
  • We added .NET SDK-style versions of our project performance stress test artifacts.
  • We removed Newtonsoft.Json from our codebase, and you now have one less package downloaded for OSS contributors.
  • We now use the latest versions of System.Collections.Immutable and System.Reflection.Metadata.

C++ Conformance and Toolset Improvements

This release contains the following C++ conformance and toolset improvements:

  • A new, experimental, token-based preprocessor that conforms to C++11 standards (including C99 preprocessor features), enabled with the /experimental:preprocessor switch. This is controlled with macro _MSVC_TRADITIONAL, which is defined 1 when using the traditional preprocessor and 0 when using the new experimental standards conformant preprocessor.
  • The Visual Studio Developer Command Prompt supports enabling the Visual C++ Spectre variant 1 mitigated runtimes (-vcvars_spectre_libs = spectre). More information about Spectre mitigations is available on the Visual C++ Team Blog.
  • Two new additions to the SSA Optimizer focused on modern C++ code generation: redundant store elimination and folding of redundant branches.
  • Optimized memory mapped I/O performance in the linker to reduce link times.

C++ Cross-Platform Development

We added, improved, and added the following to C++ cross-platform development for this release:

  • Added Add > New Item template for generating a .clang-format file following the coding convention specified for ClangFormat in Tools > Options. If the Visual Studio convention is selected, the generated file tries to match the user's current Visual Studio formatting configuration from Tools > Options.
  • Updated the shipped clang-format.exe version to 6.0.0.
  • Templates to simplify adding configurations to CppProperties.json.
  • Added templates to simplify adding configurations to CMakeSettings.json (Figure 7).
Configuration templates for CMake
(Figure 7) Configuration Templates for CMake

C++ Productivity

We made the following enhancements and improvements to C++ productivity:

  • C++ Quick Info tooltips on macros now show what they expand to, rather than just their definition. This is particularly useful for complex macros that reference other macros as it clarifies what the macro identifier is replaced with by the preprocessor.
  • Added a new quick-fix lightbulb to convert basic macros to constexpr as a new tool to modernize code.
  • IntelliSense for templates provide you more details about template arguments to take full advantage of IntelliSense within your template body (Figure 8).
Template IntelliSense
(Figure 8) Template IntelliSense
  • We are working to refresh our code analysis experience. You can now enable the new, in-progress features under Tools > Options > Text Editor > C++ > Experimental > Code Analysis. Code analysis can run in the background when files are opened or saved and results are displayed in the error list and as green squiggles in the editor (Figure 9).
In-editor code analysis
(Figure 9) In-editor Code Analysis

C++ Debugging Improvements

We made the following debugging improvements:

  • Just My Code now enables you to step-over code from system or 3rd party C++ libraries in addition to collapsing those calls in the call-stack window. You can control this behavior for any C++ libraries when your code is compiled with /JMC and the non-user libraries paths are specified in a .natjmc file. If the system library calls into user-code, when you step in, the debugger skips all system code and stops on the first line of user-code callback (Figure 10).
Just My Code
(Figure 10) Just My Code
  • Data breakpoints can now be set inside the Watch, Quickwatch, Autos, and Locals windows, allowing you to break when a value stored in memory changes in just a few, short clicks.
  • Source Link lets you embed information about an executable or library's original source code into the PDB during compilation.
  • When debugging, the console window now stays open by default when the program terminates execution (similar to running the program without the debugger). This behavior can be toggled back to closing the console automatically in Tools > Options > Debugging > General.

JavaScript and TypeScript Improvements

TypeScript 3.0

Visual Studio 2017 version 15.8 now includes TypeScript 3.0 by default. For more details on this release, see the TypeScript 3.0 release announcement.

Improved Vue.js support

Support for the Vue.js library has been improved, and in particular support for .vue files, also known as "single file components". This provides enhancements when editing script blocks inside .vue files, including support for script blocks authored in TypeScript through the lang="ts" attribute on the script element. (Note: A build process using WebPack or similar must be used to convert the .vue files to the HTML and JS files needed at runtime. See the Single File Components page for more details).

If the Node.js workload is installed, there will now be "Basic Vue.js Web Application" templates under the "JavaScript / Node.js" or "TypeScript / Node.js" paths in the New Project dialog. The below shows an example of editing TypeScript code inside a script block in a .vue file (Figure 11).

Editing a .vue file
(Figure 11) Editing .vue Files

ESLint Improvements

We reimplemented ESLint support for this release. ESLint has the following following improvements and enhancements:

  • Rather than only linting saved files, Visual Studio will now lint JavaScript files as you edit, as well..
  • Results can be reported for all JS files in your project, not just open files; if there are parts of your project you do not want to be linted, an .eslintignore file can now be used to specify directories and files that should be ignored.
  • ESLint was updated to use ESLint 4 by default, but if your project has a local installation of ESLint, it will use that version instead.

ESLint may be disabled globally in Visual Studio by unchecking the Enable ESLint setting in the **Tools > Options > Text Editor > Javascript/Typescript > Linting ** (Figure 12).

ESLint Options
(Figure 12) ESLint Options

Open Folder Improvements for Node.js

There are numerous improvements working with JavaScript and TypeScript in the Open Folder scenario when the "Node.js workload" is installed. For example, managing NPM packages, building TypeScript, launching and debugging with Node.exe, executing NPM scripts, and running unit tests.

See Develop JavaScript and TypeScript code in Visual Studio without solutions or projects} for more information.

Editor Performance Improvements

In previous releases, all JavaScript and TypeScript language service operations were serviced by a single Node.js process. This could cause editor delays if commands that impact user typing (such as automatic formatting after a newline) were sent while a potentially lengthy operation was already in process (such as analyzing code for errors). To mitigate this, a separate process is now used for the operations that impact editing the most. This process is significantly lighter on system resources than the existing language service process. However, if you wish to disable the new process, check the Disable dedicated syntax process box in Tools > Options > Text Editor > JavaScript/TypeScript > Language Service.

Visual Studio Web Tools

Library Manager is a new feature included in Visual Studio 2017. It helps you manage client-side libraries in your web projects.

Container Tools

We added a new single project Docker container experience for ASP.NET Core web projects. This supplements the existing Docker Compose-based container tooling and provides a simpler, easier way to create, debug, and build Docker containers right from Visual Studio.

You can add Docker support when creating the project (Figure 13):

Enable Docker Support
(Figure 13) Enable Docker Support

Or, you can enable Docker support to an existing project through the project's context menu in Solution Explorer (Figure 14). Once you do this, Visual Studio creates a single Dockerfile in the project. You have the option to choose either Windows or Linux.

Add Docker Support
(Figure 14) Add Docker Support

Visual Studio also adds a debugger launch profile (Figure 15) for Docker so that the project can be debugged while running within a container.

Docker Launch Profile
(Figure 15) Docker Launch Profile

If you have a solution with multiple Docker projects, by default, only one container runs when you choose to start the solution. If you wish to run multiple containers simultaneously, you can right-click on the solution in Solution Explorer and select Set Startup Projects and then Multiple startup projects, and then set the Action drop-down to Start or Start without debugging for all projects that you want to run.

Once you have your containerized project running the way you want, you can right-click on the project and select Build Docker Image to build an image locally, when ready to push to Azure Container Registry or DockerHub.

You can also add the existing Docker Compose-based functionality to an ASP.NET Core web project through the new Container Orchestrator Support option (Figure 16). Right-click on the ASP.NET Core web project in Solution Explorer, select Add > Container Orchestrator Support, and then select Docker Compose from the drop-down menu.

Add Container Orchestrator Support
(Figure 16) Add Orchestration Support

Publish Improvements

This release contains the following publish improvements:

  • When publishing a Docker container to a container registry, you can now customize the tag for the image. You can either manually add a tag (default is "latest") or use an auto-generated tag to make sure each tag is unique.
  • When creating a new Azure App Service, you can also configure Application Insights to collect telemetry automatically. If you choose a region that also has Application Insights, it is enabled by default. If you choose a region that does not yet contain Application Insights, you can manually specify a different region for your Application Insights resource from the dropdown.
  • When publishing Azure Functions projects you can choose to publish using the new Run-From-Zip feature.

Visual Studio Tools for Xamarin

This release contains the following updates for Xamarin:

  • We added support for Xcode 9.4.
  • When you create a new Xamarin.Forms project, the default code sharing option is now .NET Standard. The shared project option is still available.
  • We added Android incremental build improvements. Xamarin.Android uses files generated in the intermediate output directory to achieve incremental builds that are faster than full builds. Previously, if you changed your project's target framework it would invalidate the files and result in a full build on the next run. In this release we now preserve the files in per-framework folders so you can switch between different target frameworks and still benefit from incremental builds. Cleaning the project allows you to reclaim the disk space used by the preserved files.
  • We have added minimum support for Xamarin.Mac binding projects in Visual Studio 2017. This enables Visual Studio to load and recognize Xamarin.Mac binding projects as supported. You can also build Xamarin.Mac binding projects, however the build process is performed locally without using the native Mac tool chain so the generated IL assemblies cannot be used for running or debugging in apps.

Hyper-V Android Emulator Support

This release adds support for the Google Android emulator that is compatible with Hyper-V when running on the Windows 10 April 2018 Update (Figure 17). This enables you to use Google's Android emulator side-by-side with other Hyper-V based technologies, including Hyper-V virtual machines, Docker tooling, the HoloLens emulator, and more. Mobile app developers who use Hyper-V now have access to a fast Android emulator that always supports the latest Android APIs, works with Google Play Services out of the box, and supports all features of the Android emulator, including camera, geolocation, and Quick Boot.

Screenshot of both the Google Android emulator and HoloLens emulator running at the same time.
(Figure 17) Google Android Emulator and HoloLens Emulator

Xamarin.Android Designer

We made significant improvements to the designer experience for Xamarin.Android. Highlights include:

  • A split-view editor was introduced which allows you to create, edit, and preview your layouts at the same time (Figure 18).
Screenshot of the Xamarin.Android split-view editor.
(Figure 18) Xamarin.Android Split-view Editor
  • Improved Intellisense experience and reliability of custom controls.
  • Sample data support for system provided values.

Xamarin.Forms Previewer

The Xamarin.Forms Previewer now has toolbox support when using Xamarin.Forms version or higher. Xamarin.Forms controls will appear in the toolbox so they are more discoverable for those new to the toolkit. You can also drag and drop a control onto the XAML code editor to add the control to the page.


This release adds the following improvements for Python developers:

  • Python IntelliSense now uses typeshed definitions to provide richer results for libraries where auto-completions cannot be inferred by static analysis.
  • The experimental debugger, first announced in the 15.7 preview releases, is now the default debug engine used for Python, providing faster and more reliable debugging for Python code.
  • We have added support for Python 3.7, including fixes to enable debug attach, profiling, and mixed-mode (cross-language) debugging features.
  • For more information about the above features, be sure to check out our Python in Visual Studio 2017 version 15.8 blog post.

Migrate Local Azure Function Settings

The "Managed Application Settings" dialog available from the publish summary page now displays values from your local.settings.json file and enables you to migrate values to your remote Azure Function app hosted in Azure.

Connected Services

You can now configure continuous delivery for Azure functions directly from Visual Studio 2017 for solutions with Azure Function Projects.

Test Explorer Improvement

Test Explorer now displays a more informative test status summary pane (lower pane of test explorer) when one of the groupings in the hierarchy view is selected. The pane now displays how many tests failed, passed, or not run in that grouping.

New Extensibility Features

Language Server Protocol

Visual Studio now has native support for the Language Server Protocol. Extension authors can create extensions that communicate with existing language servers to add additional language support to Visual Studio. Extension users can install these extensions to start using their favorite language inside Visual Studio like Rust.

AsyncPackage Template

Extension authors can now use item templates to create AsyncPackages to optimize their extension's performance. Read more about AsyncPackages.

Extension Packs

Easily share your favorite set of extensions or set up a new install of Visual Studio with all your extensions by using an extension pack. Extension packs allow you to create a list of extensions, package them in an extension, and use it quickly to install those extensions in bulk.

Command Line Extension Publishing

Publish your extensions to the Visual Studio Marketplace using the command line.

.NET Core SDK 2.1.400

Visual Studio 2017 version 15.8 includes .NET Core SDK 2.1.400. New SDK features include:

  • Added NUnit templates
  • Added support for signed global tools
  • Improved help text for better clarity

32 issues were closed on the .NET Core CLI.
20 issues were closed on the .NET Core SDK.

Source Control

For .NET Core projects, files added directly to the project through File Explorer will now show the correct Git and TFS tracking icons in the Solution Explorer without needing to reload the solution.

.NET Test Adapter Extension

The .NET Test Adapter has the following breaking change and deprecation:

  • Breaking Change: All test projects must include their .NET test adapter NuGet reference in their csproj. If they do not, this test output will appear on the project if discovery by a test adapter extension is kicked off after a build or if the user tries to run the selected tests:
    • Test project {} does not reference any .NET NuGet adapter. Test discovery or execution might not work for this project. It is recommended to reference NuGet test adapters in each test project in the solution.
  • .NET test frameworks have been releasing their adapters in NuGet packages and moving away from Visual Studio extensions. The support for .NET test adapters delivered through extensions is deprecated, but still supported. This means that two new options are available in Tools > Options > Test.
    • The first option allows Visual Studio to only use the test adapters it finds in the test assembly folder (populated by the test adapter NuGet reference) or as specified in the runsettings file.
    • The second option allows Visual Studio to "fallback" to the old behavior and search for test adapter extensions for projects that do not have a test adapter NuGet reference. Both options are checked by default so no default behavior will change in this release.
  • Note: Non-.NET test adapters are not affected with this change.

ASP.NET .NET Framework Secrets Support

For ASP.NET, .NET Framework projects that target .NET Framework 4.7.1 or higher, you can now open and store secrets you do not want in your source code in usersecrets.xml by right-clicking on the project and selecting "Managed User Secrets".

.NET Framework 4.7.2

Visual Studio 2017 version 15.8 now offers the .NET Framework 4.7.2 development tools to all supported platforms with the 4.7.2 runtime included. The .NET Framework 4.7.2 offers several new features and improvements as well as numerous reliability, stability, security, and performance fixes.

You can find more details about the .NET Framework 4.7.2 in these articles:

Delay Package Load

Visual Studio now delays the loading of asynchronous packages that are configured to autoload until after the Visual Studio IDE has fully started and the solution has loaded. This change does not affect synchronously autoloaded packages. Users can look at the Task Status Center in the lower left corner of the status bar to monitor progress. Extension authors that create asyncpackages should test their extension. For more information, see Improving the responsiveness of critical scenarios by updating auto load behavior for extensions.

Release Notes Icon Visual Studio 2017 version 15.8 Security Advisory Notices

Visual Studio 2017 version 15.8 -- released on August 14, 2018

CVE-2018-0952 Diagnostic Hub Standard Collector Elevation Of Privilege Vulnerability

An elevation of privilege vulnerability exists in a visual studio service, which can lead to system privileges by a non-admin user when writing files. An attacker who took advantage of this could write files as system while only having user level access. This security update addresses this issue by impersonating the current user to validate access to the file location.

Visual Studio 2017 version 15.8 Preview 4 -- released on July 10, 2018

CVE-2018-8172 Visual Studio Remote Code Execution Vulnerability

A remote code execution vulnerability that can lead to exploitation of a user's machine by opening a specially crafted project, or resource file. The security update addresses the vulnerability by correcting how Visual Studio checks the source markup of a file.

CVE-2018-8260 .NET Framework Remote Code Execution Vulnerability

A remote code execution vulnerability exists in .NET software that can lead to exploitation of a user's machine by allowing attackers to run arbitrary code in the context of the current user. The security update addresses the vulnerability by correcting how .NET checks the source markup of a file.

CVE-2018-8232 .NET Microsoft Macro Assembler Tampering Vulnerability

Tampering vulnerability related to the Microsoft Macro Assembler improperly validating code. The security update addresses the vulnerability by ensuring that Microsoft Macro Assembler properly validates code logic.

CVE-2018-8171 ASP.NET Core Security Feature Bypass Vulnerability

An ASP.NET Core Security Feature Bypass Vulnerability exists when the number of incorrect login attempts is not validated that can lead to an attacker trying infinite authentication attempts. The update addresses the vulnerability by validating the number of incorrect login attempts.

Visual Studio 2017 version 15.8 Preview 3 -- released on June 26, 2018

CVE-2018-11235 Microsoft Security Advisory for Git Security Vulnerability

We fixed a security vulnerability in Git that was disclosed by the Git community. The vulnerability can lead to arbitrary code execution when a user clones a malicious repository.

Visual Studio 2017 version 15.8 Preview 1 -- released on May 08, 2018

CVE-2018-0765 Microsoft Security Advisory for .NET Core Denial of Service Vulnerability

  • Microsoft is releasing this security advisory to provide information about a vulnerability in .NET Core and .NET native version 2.0. This advisory also provides guidance on what developers can do to update their applications to remove this vulnerability.
  • Microsoft is aware of a denial of service vulnerability that exists when .NET Framework and .NET Core improperly process XML documents. An attacker who successfully exploited this vulnerability could cause a denial of service against a .NET Framework, .NET Core, or .NET native application.
  • The update addresses the vulnerability by correcting how .NET Framework, .NET Core, and .NET native applications handle XML document processing.
  • If your application is an ASP.NET Core application, developers are also advised to update to ASP.NET Core 2.0.8.


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 Feedback Icon icon is located in the upper right-hand corner. You can track your issues in the Visual Studio Developer Community, where you can ask questions and find answers. You can also make a product suggestion through UserVoice or get free installation help through our Live Chat support.


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.

Developer Tools Blogs

Visual Studio 2017 Release Notes History

For more information relating to past versions of Visual Studio 2017, see the Visual Studio 2017 Release Notes History page.

Top of Page