Visual Studio 2017 version 15.8 Release Notes
Developer Community | System Requirements | Compatibility | Distributable Code | License Terms | Blogs | Known Issues
Note
This is not the latest version of Visual Studio. To download the latest release, please visit the Visual Studio site.
Support Timeframe
This version is now out of support. For more information about Visual Studio support, please review the Support Policy for Visual Studio 2017.
Refer to the latest version of the release notes or visit the Visual Studio site to download the latest supported version of Visual Studio 2017.
Visual Studio Blog
The Visual Studio Blog is the official source of product insight from the Visual Studio Engineering Team. You can find in-depth information about Visual Studio 2017 version 15.8 releases in the following posts:
- Visual Studio 2017 version 15.8 -- Read the latest blog post!
Visual Studio 2017 version 15.8 Releases
- November 2, 2018 -- Visual Studio 2017 version 15.8.9 Servicing Update
- October 24, 2018 -- Visual Studio 2017 version 15.8.8 Servicing Update
- October 10, 2018 -- Visual Studio 2017 version 15.8.7 Servicing Update
- October 02, 2018 -- Visual Studio 2017 version 15.8.6 Servicing Update
- September 20, 2018 -- Visual Studio 2017 version 15.8.5 Servicing Update
- September 11, 2018 -- Visual Studio 2017 version 15.8.4 Servicing Update
- September 6, 2018 -- Visual Studio 2017 version 15.8.3 Servicing Update
- August 28, 2018 -- Visual Studio 2017 version 15.8.2 Servicing Update
- August 17, 2018 -- Visual Studio 2017 version 15.8.1 Servicing Update
- August 14, 2018 -- Visual Studio 2017 version 15.8 Minor Release
Important
Visual Studio 2017 version 15.8 Security Advisory Notices
- October 10, 2018 -- Visual Studio 2017 version 15.8.7 Servicing Update
- September 11, 2018 -- Visual Studio 2017 version 15.8.4 Servicing Update
- August 14, 2018 -- Visual Studio 2017 version 15.8
- July 10, 2018 -- Visual Studio 2017 version 15.8 Preview 4
- June 26, 2018 -- Visual Studio 2017 version 15.8 Preview 3
- May 08, 2018 -- Visual Studio 2017 version 15.8 Preview 1
Summary of Notable New Features in 15.8
- The installer now offers the option to download all files before starting installation.
- We improved performance during project unload/reload and branch switching.
- Solution load times can be improved by disabling automatic document restore.
- We made significant test performance improvements while running large solutions with multiple test projects.
- Visual Basic now provides you with a significant performance improvement.
- Performance Profiling now offers the ability to pause/resume data collection and a new .NET Object Allocation Tracking tool has been added.
- We made improvements to the CPU Usage tool for Performance Profiling.
- We added new productivity features, such as code cleanup, invert-if refactoring, Go to Enclosing Block, Multi-Caret support, and new keyboard profiles.
- You can choose your target instance when debugging extensions.
- Launch the Snapshot Debugger directly from the publish summary page.
- We introduced F# 4.5, a new language version that fully supports
Span<'T>
and contains significant improvements to stack traces for async code. - We improved performance and added new features in F# tools, such as Ctrl+Click to Go to Definition.
- Enhancements to C++ toolset include improvements to the SSA optimizer and linker.
- C++ cross-platform development additions include ClangFormat updates, and configuration templates in CMake and Open Folder for MinGW, Linux, and Windows.
- Changes to C++ productivity include Template IntelliSense, Quick Info tooltips on macros, convert to constexpr lightbulbs, in-editor code analysis squiggles, and more.
- C++ debugging improvements include Just My Code updates and new data breakpoints.
- There are numerous JavaScript and TypeScript improvements and features.
- You can now manage client-side libraries in your web projects.
- We added a new single project Docker container experience for ASP.NET Core web projects.
- You can now customize the tag for a Docker image with the publish improvements made in this release.
- Xamarin improvements include support for Xcode 9.4 and smarter Android incremental builds.
- You can use Google's Android emulator side-by-side with Hyper-V on Windows 10 April 2018 Update.
- We added a split-view editor for the Xamarin.Android designer.
- The Xamarin.Forms Previewer now has toolbox support, and we moved it to a split-view editor.
- You can now use cross-language debugging with Python 3.7.0rc1.
- The Migrate local Azure Function settings to Azure now displays new values.
- With added support for Azure Functions, you now have a new target host in the Configure Continuous Delivery to Azure dialog.
- Test Explorer summary pane improvement now provides more informative test status.
- .NET Test Adapter Extensions: breaking change and deprecation.
- We added native support for the Language Server Protocol.
- You now have secrets support for ASP.NET .NET Framework projects.
- Visual Studio now helps you upgrade ASP.NET .NET Framework apps to improve build performance.
- Visual Studio now offers .NET Framework 4.7.2 development tools to supported platforms with 4.7.2 runtime included.
- Async autoload packages are delayed until startup and solution load complete.
- The Build Tools Visual Studio 2017 now support Workflow and includes the VSSDK.
- Git and TFS status now update properly for external file changes in .NET Core projects.
- .NET Core SDK 2.1.400 is included.
Top Issues Fixed in 15.8
These are the customer-reported issues addressed in 15.8:
- SSDT not present in Visual Studio Build Tools 2017.
- Anaconda fails to uninstall during upgrade (Error 87).
- Upgrade to 15.7 generates error: PackageId:Anaconda3.Exe.x64;PackageAction:Uninstall;ReturnCode:87;.
- Visual Studio update generates UWP BuildError at MakePri 0x80073b0f and 0xdef00532 errors at my Solution.
- VS 2017 has problems with the ASP.NET Core export template feature.
- Test Explorer (SpecFlow tests): goes to the feature class file not the feature file.
- Project template exported from a C++ project only contains a vcxproj and vcxproj.filters, no source or headers.
- Bad codegen on x64.
- Right-click context menu on a Solution Folder does nothing in Enterprise 15.8 Preview 2.
- VS2017 doesn't remember screen position and size for use on 3 monitors.
- UTF8-no-BOM causes diff window to display erroneous encoding warning.
- Double-clicking a word only selects to the start of the word, not the entire word.
- VS2015 and VS2017 create an empty Debug folder in the path defined by $(SolutionDir) despite both $(OutDir) and $(IntDir) using completely different settings.
- If you create an MFC dialog-based project in Japanese environment with VS2017, editing the dialog will cause errors in the build.
- Download Progress Text display on Visual Studio Installer.
- Right click executable project in Solution Explorer -> Debug -> Start new instance picks random project from solution to start.
- DEVENV Command line build fails with: This operation may only take place in the UI thread.
- Find and replace remembers file types.
- Error messages are unreadable in Package manager console because of font color and background color.
- Visual Studio Community 2017 15.4.1 Web publish preview fails with not authorized.
- Open test results in VS 2017 for XAML Builds.
See all customer-reported issues fixed in Visual Studio 2017 version 15.8.
Details of What's New in 15.8
Visual Studio 2017 version 15.8.0
released on August 14, 2018
New Features in 15.8
Install
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.
Performance
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.
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.
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 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 option Stitch 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.
Productivity
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
- Invert If enables you to invert your logic in if-else statements. Place your cursor in the
- 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 > Environment > Keyboard and the top drop-down menu.
Debugging
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.
You can now attach the Snapshot Debugger directly from the Publish summary page (Figure 6).
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
andNativePtr.toVoidPtr
functions in FSharp.Core. - New types
inref<'T>
andoutref<'T>
, which are read-only byrefs and write-only byrefs, respectively. This correspond toin ref
andout ref
in C#. - The ability to produce
ByRefLike
structs (such asSpan
andReadOnlySpan
). - The ability to produce
IsReadOnly
structs. - Implicit dereference of
byref
- andinref
-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 usingyield!
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
andFuncConvert.FromAction
APIs that typeSystem.Func
andSystem.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
withContainsKey
and subsequentItem
calls has been changed to useTryGetValue
, 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
/control.fsi
files in FSharp.Core have been split intoasync.fs
/async.fsi
,event.fs
/event.fsi
,eventmodule.fs
/eventmodule.fsi
,mailbox.fs
/mailbox.fsi
, andobservable.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).
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).
- 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).
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).
- 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).
ESLint Improvements
We reimplemented ESLint support for this release. ESLint has the 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).
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):
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.
Visual Studio also adds a debugger launch profile (Figure 15) for Docker so that the project can be debugged while running within a container.
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.
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.
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).
- 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 3.1.0.583944 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. The Xamarin.Forms Previewer is now part of the XAML editor. You can open and close it with the expand icon on the edge of the editor pane.
Python
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 {<Full path of 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".
Improve ASP.NET .NET Framework Performance
If the referenced .NET Compiler package is out of date in an ASP.NET .NET Framework project, Visual Studio will prompt you to upgrade the package when you open the project to improve your build performance.
.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:
- .NET Framework 4.7.2 RTM Blog
- .NET Framework 4.7.2 release notes
- Known issues in the .NET Framework 4.7.2
- Application Compatibility in the .NET Framework 4.7.2
- API Changes
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.
---
Visual Studio 2017 version 15.8 Security Advisory Notices
Visual Studio 2017 version 15.8.7 Service Release -- released on October 10, 2018
CVE-2018-8292 .NET Core Information Disclosure Vulnerability
A security feature bypass vulnerability exists in .NET Core when HTTP authentication information is inadvertently exposed in an outbound request that encounters an HTTP redirect. An attacker who successfully exploited this vulnerability could use the information to further compromise the web application. The security update addresses the vulnerability by correcting how .NET Core applications handles HTTP redirects.
Visual Studio 2017 version 15.8.4 Service Release -- released on September 11, 2018
CVE-2018-8409 .NET Core Denial Of Service Vulnerability
A denial of service vulnerability exists in .NET Core 2.1 when System.IO.Pipelines improperly handles requests. An attacker who successfully exploited this vulnerability could cause a denial of service against an application that is leveraging System.IO.Pipelines. The vulnerability can be exploited remotely, without authentication. A remote unauthenticated attacker could exploit this vulnerability by providing specially crafted requests to the application.
CVE-2018-8409 ASP.NET Core Denial Of Service Vulnerability
A denial of service vulnerability exists in ASP.NET Core 2.1 that improperly handles web requests. An attacker who successfully exploited this vulnerability could cause a denial of service against an ASP.NET Core web application. The vulnerability can be exploited remotely, without authentication. A remote unauthenticated attacker could exploit this vulnerability by providing a specially crafted web requests to the ASP.NET Core application.
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.
Visual Studio 2017 version 15.8.1
released on August 17, 2018
Top Issues Fixed in 15.8.1
These are the issues addressed in 15.8.1:
- Fixed an issue where Visual Studio would close unexpectedly when a browser window was closed while debugging a Web project.
Visual Studio 2017 version 15.8.2
released on August 28, 2018
Top Issues Fixed in 15.8.2
These are the customer-reported issues addressed in 15.8.2:
- Publish single file context menu item missing.
- Git network operations not working: Cannot spawn git-askpass.exe.
- "Visual C++ Resource Editor Package" load failed.
- Preview Transform gives error.
- Cannot type close brace.
- Object reference not set to an instance of an object when deploying Service Fabric project after update 15.8.0.
- "The given path's format is not supported" installation error.
- Task ExpandPriContent failed. Illegal characters in path.
- "Could not create instance of type System.Collections.Genertic.Iset'1[Signer]" installer error.
- Service fabric deployment fails in 15.8.0.
- Cannot create app package for Windows store.
- Incorrect code generation for strongly-typed resources.
- Keyboard binding for Italian layout.
- IntelliSense broken #9999.
- When working on a Unity project and Unity rewrites multiple project files, the Visual Studio Tools for Unity will now automatically reload the solution.
- The customer will now get a dialog to close Office applications if they are blocking the Visual Studio install and causing a failure of 1303.
Visual Studio 2017 version 15.8.3
released on September 6, 2018
Top Issues Fixed in 15.8.3
These are the customer-reported issues addressed in 15.8.3:
- Visual Studio 2017 version 15.8.2 contained a pre-release build of .NET Core SDK 2.1.401 that is incompatible with Visual Studio. We have corrected this issue with Visual Studio 2017 version 15.8.3.
- VSCppUnit test case creation failure.
- Python IntelliSense not working on Python 2.7.
- XAML designer causing Visual Studio to close unexpectedly.
Visual Studio 2017 version 15.8.4
released on September 11, 2018
Top Issues Fixed in 15.8.4
These are the customer-reported issues addressed in 15.8.4:
- Constexpr function with explicit (void) parameter crashes MSVC 15.8.0 release.
- TypeScriptLspCodeActionProvider encountered an error and has been disabled.
- The 'Shared Web Components' package did not load correctly.
- Editing CSS with Browser Link enabled can crash Visual Studio.
- Service Fabric Deployment fails in 15.8.0.
- Incorrect error for constexpr pointer to members with VS2017 15.8.
- Constexpr doesn't support __declspec(dllimport) in VS2017 15.8.
- C++ VS 2017 Update 8 difference in member function pointer between C++14 and C++17 modes leads to crashes.
- TestExplorer locking up UI in latest build.
- [WebKit] "Already defined symbol" for static template member definition (regression).
- VS 15.8.0 Internal compiler error.
- Internal compiler error in constexpr function.
- Test Explorer Window remains blank with Express.
- Visual Studio 2017 fails to open on FIPS-enabled machine..
- VS2017 15.8 Internal Compiler Error 'msc1.cpp', line 1518 when evaluating simple constexpr function.
- Fatal error C1001 after update to VS 15.8.0.
- Migrating to VS2017 15.8: Internal compiler error when using constexpr functions as template parameters.
- Internal compiler error when compiling a template function with a constexpr in VC++ 15.8.0.
- Code generated by VC 15.8.1 compiler lead to crash.
Security Advisory Notices
- CVE-2018-8409 .NET Core Denial Of Service Vulnerability
- CVE-2018-8409 ASP.NET Core Denial Of Service Vulnerability
Visual Studio 2017 version 15.8.5
released on September 20, 2018
Summary of What's New in 15.8.5
- Visual Studio Tools for Xamarin now supports Xcode 10.
Top Issues Fixed in 15.8.5
These are the customer-reported issues addressed in 15.8.5:
- Debugger tooltip does not expand in Xamarin.iOS debugging session.
- Debugger won't let me leave execution point (Android).
- After updating to 15.8.1, data tip does not show when debugging.
- Debugger data tip does not expand [Editor].
- Exception:MSB0001: Internal MSBuild Error: Already registered for build-time.
- Wrong path to resource in manifest for ClickOnce after upgrading to VS 15.8.1.
- ClickOnce Manifest error in 15.8.
- ClickOnce Publish is missing certain references.
- ClickOnce: Language file copied to wrong location.
- Reference missing in the ClickOnce publish folder.
- Compiling non-.NET SDK style F# projects results in an internal MSBuild error unless MSBuild parallelism is set to 1.
- F# is not NGEN'd in Visual Studio.
- F# deploys the FSharp.Core 4.5.0.0 binary in the 4.4.3.0 location.
Details of What's New in 15.8.5
Visual Studio Tools for Xamarin
Visual Studio Tools for Xamarin now supports Xcode 10 that allows you to build and debug apps for iOS 12, tvOS 12, and watchOS 5. See how to get ready for iOS 12 and our introduction to iOS 12 for more details on the new features available.
Visual Studio 2017 version 15.8.6
released on October 02, 2018
Summary of What's New in 15.8.6
- The latest Windows 10 SDK is available.
Top Issues Fixed in 15.8.6
These are the customer-reported issues addressed in 15.8.6:
- NuGet packages for Intellisense are broken.
- Visual Studio closes after opening sln.
- App.Config XML editor still freezing in 15.8.4.
Details of What's New in 15.8.6
Latest Windows 10 SDK for Universal Windows Platform developers
The latest Windows 10 SDK (build 17763) is now available as an optional component for the Universal Windows Platform development workload. You can add this SDK to the workload by selecting the Windows 10 SDK (10.0.17763.0) checkbox.
Visual Studio 2017 version 15.8.7
released on October 10, 2018
What's New in 15.8.7
Azure DevOps
Visual Studio Team Services is now Azure DevOps! You will see this new branding in Team Explorer and in references across Visual Studio.
Security Advisory Notices
CVE-2018-8292 .NET Core Information Disclosure Vulnerability
Visual Studio 2017 version 15.8.8
released on October 24, 2018
Top Issues Fixed in 15.8.8
These are the customer-reported issues addressed in 15.8.8:
- /DEBUG:FASTLINK no debug info for STL types included via PCH.
- Bad codegen seen in 15.8 RTW compiler.
- Heap corruption in stack unwinding when inlining function.
- Linker consumes 6 GB of memory for specific test case.
Visual Studio 2017 version 15.8.9
released on November 2, 2018
Top Issues Fixed in 15.8.9
These are the customer-reported issues addressed in 15.8.9:
- Added support for Xcode 10.1 in Visual Studio Tools for Xamarin.
- Updated the Xamarin.Forms template to Xamarin.Forms 3.3.0.
- Update 15.8.6 breaks Installer Projects.
- Internal Compiler error in VS15.8 msc1.cpp line 1518.
- Microsoft Visual Studio 2017 Installer Projects 0.8.8 and VS 15.8.6.
- SFINAE fails to detect matching overloaded function in preview VS preview 3 15.9.0.
- XAML Designer crash on Visual Studio close.
Known Issues
See all existing known issues and available workarounds in Visual Studio 2017 version 15.8.
Feedback & Suggestions
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.
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.