Visual Studio IconVisual Studio 2017 15.8 版发行说明


开发人员社区 | 系统要求 | 兼容性 | 可分发代码 | 许可条款 | 博客 | 已知问题



注意

此版本不是最新版本的 Visual Studio。 若要下载最新版本,请访问 Visual Studio 网站。


支持的时间范围

此版本现已不受支持。 有关 Visual Studio 支持的详细信息,请查看 Visual Studio 2017 的支持策略

请参阅最新版本的发行说明或访问 Visual Studio 站点,下载最新支持的 Visual Studio 2017 版本。

Visual Studio 博客

可从 Visual Studio 博客获取来自 Visual Studio 工程团队的官方产品见解。 可以通过以下文章,深入了解 Visual Studio 2017 版本 15.8:

Visual Studio 2017 15.8 版发布

重要

Visual Studio 2017 15.8 版安全公告通知

15.8 版中的主要新增功能摘要

15.8 版中解决的首要问题

15.8 版中解决了客户报告的下列问题:

查看 Visual Studio 2017 15.8 版中已解决的所有客户所报问题。

The Developer Community Portal


15.8 版中的最近更新详情

Release Notes IconVisual Studio 2017 15.8.0 版

发布日期:2018 年 8 月 14 日

15.8 版中的新增功能

安装

现可选择在开始安装之前下载所有安装文件。

  • 要使用这一新选项,请在安装程序中选择“全部下载后再安装”选项(图 1)。 如果 Internet 连接速度较慢,建议使用此选项。
  • 默认选项仍为“下载时安装”,它可并行下载和安装。
Download Otion
(图 1)下载选项

性能

此版本包含以下性能改进:

  • 由于无需再重新加载解决方案,因此可更快地对大型解决方案执行 C#、VB 和 C++ 项目的分支切换。
  • 缩短在大型解决方案中卸载和重载一小组 C# 和 VB 项目的时间 - 从数分钟缩短到数秒钟。
  • 添加了一个选项,用于禁止重新打开已在上一会话中打开的文档,因为重新打开某些类型的文件或设计器会延迟解决方案加载。
    • 通过“工具”>“选项”>“项目”>“解决方案”>“常规”切换此选项

测试性能

显著提升了在运行包含多个测试项目的大型解决方案期间的性能。 在我们的实验室中,超过 10,000 个 MSTest 的解决方案执行单个测试的速度提高了 82%!

Visual Basic 性能改进

Visual Basic 现显著提升了使用 CInt(Fix(number)) 模式将非整数类型转换为整数时的性能。

性能分析

此版本在以下方面增强了性能分析功能:

  • 增添了暂停状态下启动分析的功能:

    • 性能探查器 (ALT-F2) 中的 CPU 使用情况工具现可在暂停状态下启动(图 2)。 在等待值得进行 CPU 使用情况调查的方案时,这非常有用。 如果在启动时禁用 CPU 使用情况收集功能,则性能探查器将不会收集任何 CPU 使用情况示例堆栈数据,除非专门启用此类数据。 这样会减少收集和分析数据的数量,从而使性能调查更加高效。

    • 要在禁用 CPU 使用情况示例收集时启动会话,请单击性能探查器启动页上“CPU 使用情况”旁的齿轮图标。 在“CPU 使用情况”属性页上,取消选中“启用 CPU 分析 (采样)”然后单击“确定”,保存设置

      CPU Usage Tool settings page
      (图 2)CPU 使用情况工具设置
    • 启动目标应用程序后(单击性能探查器启动页面上的“开始”),会出现 CPU 利用率图(图 3),可在其中控制 CPU 分析。 要启用 CPU 使用情况示例堆栈数据收集功能,请在视图中间选择“启用 CPU 分析”,或单击 CPU 使用率图下方的“记录 CPU 配置文件”。 可单击“记录 CPU 配置文件”根据需要多次启用/禁用示例数据收集。 CPU 使用率图的颜色出现相应变化,表示在该时间点是否启用/禁用示例收集。

      CPU Usage Tool monitoring view
      (图 3)CPU 使用情况图
  • 添加了 .NET 对象分配跟踪工具:

    • 向性能探查器提供的工具系列增添了 .NET 对象分配跟踪工具。 如果为性能探查器会话调用此工具,将为目标应用程序中发生的每个 .NET 对象分配启动堆栈跟踪的集合。 此堆栈数据和对象类型及大小信息一同进行分析,以显示应用程序的内存活动详情。 可以快速确定代码中的分配模式并识别异常。 此外,对于垃圾回收 (GC) 事件,用户可轻松确定已收集和保留了哪些对象,并快速识别占用应用程序大部分内存的对象类型。
    • 这对 API 编写器来说尤其有用,有助于最大程度减少分配。 许多应用程序都会超出诊断数据收集中涉及的缓冲区限制,但仍可很好地诊断执行 API 关键方案的小型测试应用程序。 测试应用程序执行过程中,性能探查器会显示实时对象(计数)的折线图和对象增量(百分比变化)的条形图。
    • 要使用 .NET 对象分配跟踪工具,请调出性能探查器启动页(图 4),选择要分析的目标(默认目标是解决方案中的启动项目),勾选“可用工具”下的“.NET 对象分配跟踪”,然后单击“开始”
    Performance Profiler launch page
    (图 4)性能探查器启动页

性能分析(CPU 使用情况)

此版本对性能探查器的 CPU 使用情况工具做出了以下改进(可通过 ALT-F2 获得):

  • 默认情况下,“调用树”视图现按逻辑调用堆栈显示异步执行。 可通过取消选中 CPU 使用情况主视图的“筛选器”下拉列表中的“拼结异步代码”选项来关闭此行为
  • 添加了“模块/函数”视图,该视图按模块 (dll) 和模块内的函数显示性能信息。 在 CPU 使用情况主视图中选择函数时,可从上下文菜单中显示“模块/函数”视图,也可以从“调用树”或“调用方/被调用方”视图的“查看”下拉列表中显示“模块/函数”视图。
  • 实例指示已添加到 CPU 使用情况工具主视图中的 CPU 使用情况图中。 双击任意 CPU 使用情况视图中列出的函数,即可在函数执行时(例如,在堆栈上)查看实例。

生产力

此版本在以下方面提升了生产力:

  • 可使用格式文档(Ctrl + K、D 或 Ctrl + E、D)执行其他代码清理进行 C# 开发。 按以下方式配置清理:转到“工具”>“选项”>“文本编辑器”>“C#”>“代码样式”>“格式”>“常规”
  • 增添了更多使用 “Ctrl + .”或“Alt + Enter”的重构和快速操作
    • “倒转 If”可让 if-else 语句中的逻辑反转。 将光标置于 if 关键字,以触发此重构。
    • 通过从方法调用站点添加参数,可向方法调用站点添加参数并触发“快速操作和重构”,从而向方法添加参数
    • 删除不必要的括号时会一并删除对编译不重要的二元运算符两侧的括号。 可通过“工具”>“选项”>“文本编辑器”>“C#”>“代码样式”>“常规”或以下 .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
    • 此外,还可通过“工具”>“选项”>“...”或以下 .editorconfig 将“在分配中使用三元条件并返回语句”配置为样式规则
      • dotnet_style_prefer_conditional_expression_over_assignment
      • dotnet_style_prefer_conditional_expression_over_return
  • 在“转到所有”窗口中添加了新的命令和改进功能
    • 通过“转到封闭块”(Ctrl + Alt + 向上键),可快速导航到封闭代码块的开头
    • 通过“转到下一个/上一个问题”(Alt + PgUp/PgDn),可跳到下一个/上一个问题(错误、波形曲线和灯泡)
    • “转到成员”(Ctrl + T、M)现默认适用于文件。 可通过将作用域切换到当前文档 (Ctrl + Alt + C),使默认值更改回解决方案
  • 借助对多个插入点的支持,现可在文件中的多个任意位置创建插入点并选择内容。 这样,你可以同时在多个位置添加、编辑或删除文本。
    • 通过“Ctrl + Alt + 单击鼠标左键”插入点
    • 使用 Shift + Alt + Ins 在与当前所选内容匹配的下一个位置添加所选内容和插入点
    • 有关操作的完整列表,请参阅“编辑”>“多个插入点”
  • 使用 Alt + ` 访问上下文导航菜单
  • 让键绑定与 Visual Studio Code 和 ReSharper (Visual Studio) 这两个新的键盘配置文件保持一致:。 可以依次单击“工具”>“选项”>“环境”>“键盘”,并在顶部下拉菜单下找到这些方案。

调试

此版本在以下方面增强了调试功能:

  • 如果安装有多个 Visual Studio 2017 实例,在调试时现在可选择要将扩展部署到的实例(图 5)。 例如,通过这种方式,可以在 Visual Studio 版本通道中进行开发,而在预览通道中进行调试。

    Select your debug instance
    (图 5)选择调试实例
  • 现在可以直接从发布摘要页附加 Snapshot Debugger(图 6)

    Attach Snapshot Debugger from Publish Summary page
    (图 6)从发布摘要附加 Snapshot Debugger
  • 我们现在支持在使用堆调试小型转储时通过“任务”窗口查看“托管任务”。

适用于通用 Windows 平台开发人员的工具

在 Windows 10 Fall Creators Update(内部版本 16299)或更高版本的目标平台版本中,我们对面向通用 Windows 平台的项目的 XAML 设计器进行了许多重要改进。 这些改进包括:

  • 现可在属性检查器中编辑集合。
  • 设计器现在允许对模板和样式进行编辑,包括这些实体的定义在其他文档中定义时。
  • 类型 IconElement(如 AppBarButton 中的图标)的属性现在在属性检查器中有一个自定义编辑器,使设置这些属性变得更容易。
  • 设计器、编辑器和“编辑并继续”现都应适用于 x:DefaultBindMode。
  • Blend 中的视觉状态管理器体验现在支持 AdaptiveTrigger。

用于 Visual Studio 的 F# 4.5 和 F# 工具

我们在此版本中引入了 F# 语言版本 4.5。 这也与新的 FSharp.Core(F# 核心库)的新 4.5.x 系列保持一致。 可以在 F# RFC 存储库中了解每项更改的说明。 此版本中还有对用于 Visual Studio 的 F# 工具的诸多改进。

F# 4.5

下面是 F# 语言版本 4.5 中的一些亮点:

Span<'T> 支持

我们实现了 Span<'T> 和相关功能,因此在 F# 中可通过 SpanMemoryref 之类的构造来有效使用和生成 API。 功能包括:

  • 新的 voidptr 类型。
  • FSharp.Core 中新的 NativePtr.ofVoidPtrNativePtr.toVoidPtr 函数。
  • 新类型 inref<'T>outref<'T>,分别是只读的 byref 和只写的 byref。 此值对应于 C# 中的 in refout ref
  • 能够生成 ByRefLike 结构(如 SpanReadOnlySpan)。
  • 能够生成 IsReadOnly 结构。
  • 隐式取消引用方法中的 byref 返回值和 inref 返回值。
  • 能够在 byref/inref/outref 上生成扩展成员。

此功能集修复了 F# 4.1 中 byref 返回值初始设计的一个 bug - 即返回 byref 的函数、方法和属性未隐式取消引用返回值。 我们进行此更改,使该功能与 C# 处理 ref 返回值的方式保持一致。 当类型批注指示现在使用 ref 返回值的隐式取消引用时,将使用错误消息。

此外,此功能集还修复了 F# 编译器中的一个 bug - 可以进行“不良结构替换”,也就是说,调用 F# 结构上的方法时可以使用其他结构替换调用的实际结构。 现将结构上的 this 参数视为 inref<MyStruct>,其中包含一条错误:如果你希望修改该结构则该错误建议添加可变字段。

可在此功能集的 RFC 中详细了解 spanref 之类的构造。

Match! 计算表达式

F# 4.5 引入了 match!,一个用在计算表达式中的新关键字(由 独立提供)。 此语法糖等同于在结果中 let! 后跟 match。 可在 match! 的 RFC 中了解详细信息。

放宽了使用 yield 时序列、列表和数组表达式中的向上转换要求

F# 4.5 现在放宽了某些限制:使用 yield 时需要向上转换来将子类型转换为超类型。 自 F# 3.1 起,如果不使用 yield,这些表达式中已无此限制,因此此项改进使得与现有行为更加一致。 可在此功能的 RFC 中了解详细信息。

列表和数组括号上允许缩进

F# 4.5 现在放松了列表和数组括号的缩进规则,此前如果列表和数组括号位于自己的行上,则需将其向前缩进一个作用域。 这项要求一直以来都非常令人困惑,尤其是对 F# 初学者。 此外,F# 序列表达式无此要求。 现在,数组表达和列表表达式与序列表达式一样,不再受此要求限制。 可在此功能的 RFC 中了解详细信息。

枚举用例以公共形式发出

现在 F# 4.5 在所有情况下以公共形式发出枚举用例,以与 C# 发出枚举用例的方式保持一致。 这也更便于分析工具分析来自 F# 代码的日志,其中发出的是值而不是标签名称。 可在此功能的 RFC 中了解详细信息。

F# 编译器改进

F# 4.5 中不仅包括之前提到的语言功能改进,也包括对 F# 编译器的改进。 这些方法包括:

  • 我们删除了 F# 编译器中高达 2.2% 的分配(各种情况下),改进了编译器性能。
  • 我们修复了一个会在基于机构的枚举使用 yield! 时,导致 AccessViolatioNException 的 bug。
  • 现可再次从 FSharpFunc 中继承。
  • 对于 F# for .NET Core 的调试版本,默认禁用尾调用。 它们在发布版本中启用,因此与桌面版 F# 编译器匹配。
  • 修复了 F# 引用规范化,允许控制写入输出文件的可传递程序集引用。 你便可执行 .NET Core 上程序集重定向的等效操作。
  • 我们修复了一个 bug,其中忽略了在内联函数上尝试使用动态调用时使用的错误消息。 错误消息现将传送。
  • F# 现在尊重可在项目文件中设置的 WarningsNotAsErrors 标志。
  • 对于模式匹配分支不返回相同类型的错误消息条件,Isaac Abraham 已进行了更新,使其更为友好。
  • Steffen Forkmann 修复了编译缺少重载方法实现的接口实现时出现的内部错误 bug。
  • Gauthier Segay 删除了编译器文法阶段中一些没必要的数组复制。
  • F# 枚举上不完整的模式匹配现在生成详细的警告,给出未涵盖的用例示例(由 提供)。
  • `#nowarn "2003" 现在受到尊重(由 Matthias Diitrich 提供)。
  • 修复了在 F# 重载解析中使用 C# 扩展方法可能失败这一 bug。
  • Steffen Forkmann 修复了内部 QueueList 数据结构 bug。
  • Steffen ForkmannEugene Auduchinokncave 还提供了各种小的优化并进行了代码清除工作。

F# 核心库 4.5.x

现在推出了对 F# 核心库的下列补充内容:

  • 完成了大量工作来改进 async { } 计算表达式的堆栈跟踪。 现在应能够在堆栈跟踪中查看用户代码和用户行号。 可在此功能的 RFC 中了解详细信息。
  • 提供类型 System.FuncSystem.Action 重载的 FuncConvert.FromFuncFuncConvert.FromAction API,帮助 C# 中的互操作。 可在此功能的 RFC 中了解详细信息。
  • 提供了新类型 ValueOption,它是旨在为活动模式带来更好性能的系列未来功能中的首个功能。 可在此功能的 RFC 中了解详细信息。
  • TryGetValue 现在是 F# Map 类型上的新成员。 可在此功能的 RFC 中了解详细信息。
  • 我们解决了首次调用 MailboxProcessor.TryReceive 时 CPU 使用率较高的问题。
  • bool 比较现在使用快速泛型比较(由 Vasily Kirichenko 提供)。
  • Array.allPairs 的摘要文本已更新为正确(由 Patrick McDonald 提供)

F# 工具改进

此版本中提供 F# 工具的重大改进,例如性能改进和一些新的编辑器功能。 与往常一样,F# 开源社区提供了大量内容,作出了巨大贡献。 以下是一些亮点:

  • 我们改进了所有形式的 .NET SDK 样式项目的 IntelliSense 性能,包括那些使用多目标的项目。
  • Vasily KirichenkoSteffen ForkmannGauthier Segay 进行了社区驱动的工作,分析和改进了非常大的文件的 IntelliSense 性能。 非常大的文件(10k 以上的代码行)中的 IntelliSense 现在约是原来的两倍快。
  • 过时 FSharp.Core(尽管安装了包)的警告不再出现在 .NET SDK 样式项目中。
  • IntelliSense 中 . 之后为成员显示 XML 文档的说明工具提示在 10 秒后不再超时。
  • 修复了无法在对象构造函数参数中设置断点这一 bug。
  • 修复了重命名符号属于泛型参数时将进行复制这一 bug。
  • .NET Framework 的模板(经典 F# 模板)现在使用来自 NuGet 包的 FSharp.Core,以便与 .NET SDK F# 模板保持一致。
  • 现在为 ()[]{}[||][<>] 大括号对提供自动的事务型大括号完成。 我们与 Gibran Rosa 一起完成这项工作。
  • 现在,可以通过按住 Ctrl 并单击 F# 符号来转到定义。 此笔势的设置在“工具”>“选项”窗口中也受到尊重。
  • 修改了 IntelliSense 性能 UI,允许为各种 IDE 功能配置过时的 typecheck 信息。 每个选项的说明现在显示在设置的工具提示中。
  • 大括号匹配突出显示现在正确地突出显示大括号(与 Vasily Kirichenko 协作完成)。
  • 现在当类型以递归方式定义时“转到定义”正确导航(由 Vasily Kirichenko 提供)。
  • Vasily Kirichenko 修复了文件顶部为空时未将自动导入命名空间打开这一 bug。
  • Vasily Kirichenko 修复了将包含点的 printf 说明符错误地着色这一 bug。
  • Vasily Kirichenko 修复了将递归模块内所有打开项视为未使用这一 bug。
  • Vasily Kirichenko 大大提升了 Unused Opens 分析器的性能。
  • 属性自动完成功能现在仅建议确实是属性的选项(由 Vasily Kirichenko 提供)。
  • 现在为构造函数调用站点上的类型提供程序静态参数生成签名帮助工具提示(由 Vasily Kirichenko 提供)。
  • Vasily Kirichenko 修复了将用作度量单位的值类型作为引用类型进行着色这一 bug。
  • Vasily Kirichenko 修复了滚动时一些文件的语义着色可能消失这一 bug。
  • 现在提供了试验性的 CodeLens 实现(由 Victor Peter Rouven Müller 提供)。 可在“选项”>“文本编辑器”>“F#”>“代码透镜”中将其打开
  • 修复了 F# 编译器服务会错误地省略 XML 文档中模块名称的拼写这一 bug。
  • 使用 DictionaryContainsKey 和后续 Item 调用的代码已更改为使用 TryGetValue(由 Eugene Auduchinok 提供)。
  • Jakob Majoka 也参与了使用工具提示的其他 API 这一过程的创作。

基础结构、打包和开放源代码改进

我们对基础结构、打包和开放源供稿体验进行了以下改进:

  • 随 Visual Studio 分发的 F# 编译器不再作为单一实例安装在 F# 编译器 SDK 位置。 它现在完全与 Visual Studio 并行,这意味着,并行安装 Visual Studio 最后将导致具有真正的并行 F# 工具和语言体验。
  • 现对 FSharp.Core NuGet 包进行签名。
  • ETW 日志记录已添加到 F# 工具和编译器。
  • FSharp.Core 中非常大的 control.fs/control.fsi 文件现拆分为 async.fs/async.fsievent.fs/event.fsieventmodule.fs/eventmodule.fsimailbox.fs/mailbox.fsiobservable.fs/observable.fsi
  • 我们添加了 .NET SDK 样式版本的项目性能压力测试项目。
  • 从基本代码中删除了 Newtonsoft.json,现在,你为 OSS 参与者下载的包将少一个。
  • 我们现在使用最新版本的 System.Collections.Immutable 和 System.Reflection.Metadata。

C++ 合规性和工具集改进

此版本包含以下 C++ 符合性和工具集改进:

  • 新的基于令牌的试验性预处理器,它符合 C++ 11 项标准(包括 C99 预处理器功能),并通过 /experimental:preprocessor 开关启用。 使用宏 _MSVC_TRADITIONAL 对其进行控制,使用传统预处理器时定义为 1,使用符合标准的新试验性预处理器时定义为 0。
  • Visual Studio 开发人员命令提示支持启用 Visual C++ Spectre 变体 1 缓解运行时 (-vcvars_spectre_libs = spectre)。 有关 Spectre 缓解的详细信息,请参阅 Visual C++ 团队博客。
  • SSA 优化器添加的两项新内容重点关注新式 C++ 代码生成:冗余存储清除和冗余分支折叠。
  • 优化的内存映射了链接器中的 I/O 性能以减少链接时间。

C++ 跨平台开发

此版本中,我们改进了 C++ 跨平台开发,并向其添加了以下内容:

  • 添加了“添加”>“新项”模板,用于生成遵循“工具”>“选项”中为 ClangFormat 指定的编码约定的 .clang 格式文件。 如果选择 Visual Studio 约定,则生成的文件尝试从“工具”>“选项”中匹配用户当前的 Visual Studio 格式设置配置
  • 将配送的 format.exe 版本更新到 6.0.0。
  • 用于简化向 CppProperties.json 添加配置的模板。
  • 添加了模板以简化向 CMakeSettings.json 添加配置(图 7)
Configuration templates for CMake
(图 7)CMake 的配置模板

C++ 生产力

下面是针对 C++ 生产力的增强功能和改进功能:

  • 有关宏的 C++ 快速信息工具提示现在显示它们的扩展功能,而不仅仅是其定义。 如果复杂宏在其阐明预处理器使用什么代替宏标识符时引用了其他宏,这将特别有用。
  • 添加了新的快速修复灯泡,将基本宏转换为 constexpr 作为使代码变得新式的新工具。
  • 用于模板的 IntelliSense 提供了有关模板参数的详细信息,便于在模板正文中充分利用 IntelliSense(图 8)
Template IntelliSense
(图 8)模板 IntelliSense
  • 我们正在努力使代码分析体验焕然一新。 现在可以在“工具”>“选项”>“文本编辑器”>“C ++”>“实验”>“代码分析”下启用正在进行的新功能。 打开或保存文件时,代码分析可在后台中运行,并且结果显示在错误列表中,在编辑器中显示为绿色波形曲线(图 9)
In-editor code analysis
(图 9)编辑器内代码分析

C++ 调试改进

我们进行了以下调试改进:

  • 仅我的代码功能现在允许逐步执行系统或第三方 C++ 库中的代码,以及折叠调用堆栈窗口中的那些调用。 当代码使用 /JMC 进行编译且 .natjmc 文件中指定了非用户库路径时,可以为任何 C++ 库控制此行为。 如果你在进入时系统库调入用户代码,则调试器跳过所有系统代码并在用户代码回调的第一行上停止(图 10)
Just My Code
(图 10)仅我的代码
  • 数据断点现在可在“监视”、“快速监视”、“自动”和“局部变量”窗口中进行设置,从而只需几次短的单击即可在存储于内存中的值发生更改时切断。
  • 源链接允许在编译过程将可执行的或库的原始源代码相关信息嵌入 PDB。
  • 调试时,如果程序终止执行,控制台窗口现将默认保持打开状态(类似于在没有调试器的情况下运行程序)。 可以在“工具”>“选项”>“调试”>“常规”中将此行为切换回自动关闭控制台

JavaScript 和 TypeScript 改进

TypeScript 3.0

Visual Studio 2017 15.8 版现默认包含 TypeScript 3.0。 有关此版本的更多详细信息,请参阅TypeScript 3.0 发布公告

已改进的 Vue.js 支持

对 Vue.js 库的支持已得到改进,特别是对 .vue 文件的支持,也称为“单个文件组件”。 改进后,在 .vue 文件中编辑脚本块时可使用增强功能,包括支持通过脚本元素上的 lang="ts" 属性在 TypeScript 中创建的脚本块。 (注意:必须通过使用 WebPack 或类似包的生成过程将 .vue 文件转换为运行时所需的 HTML 和 JS 文件。有关详细信息,请参阅单文件组件组件页)。

如果安装了 Node.js 工作负载,则新建项目对话框中的“JavaScript / Node.js”或“TypeScript / Node.js”路径下将显示“Basic Vue.js Web Application”模板。 下面显示了在 .vue 文件中编辑脚本块内的 TypeScript 代码的示例(图 11)

Editing a .vue file
(图 11)编辑 .vue 文件

ESLint 改进

为此版本重新实现 ESLint 支持。 ESLint 的改进和增强功能如下:

  • Visual Studio 现在可以 lint 正在编辑的 JavaScript 文件,而不仅仅是 lint 已保存文件。
  • 可以报告项目中所有 JS 文件的结果,而不仅仅是打开文件;如果不希望验证项目的全部内容,现在可使用 .eslintignore 文件指定应忽略的目录和文件。
  • ESLint 默认更新为使用 ESLint 4,但如果项目在本地已安装 ESLint,则将使用本地版本。

通过取消选中“工具”>“选项”>“文本编辑器”>“Javascript/Typescript”>“Linting”中的“启用 ESLint”设置,可以在 Visual Studio 中全面禁用 ESLint(图 12)

ESLint Options
(图 12) ESLint 选项

针对 Node.js 的“打开文件夹”改进

安装“Node.js 工作负载”后,在“打开文件夹”方案中使用 JavaScript 和 TypeScript 时有了许多改进。 例如,管理 NPM 包、生成 TypeScript、使用 Node.exe 进行启动和调试、执行 NPM 脚本和运行单元测试。

有关详细信息,请参阅 Develop JavaScript and TypeScript code in Visual Studio without solutions or projects(在 Visual Studio 中无需解决方案或项目即可开发 JavaScript 和 TypeScript 代码)。

编辑器性能改进

在上一版本中,所有 JavaScript 和 TypeScript 语言服务操作都由一个 Node.js 进程提供。 如果正在进行的操作可能很冗长(例如分析错误代码),此时发送了影响用户输入的命令(例如在换行符后自动格式化),则可能导致编辑器延迟。 为缓解这种情况,现将对影响编辑最大的操作使用单独进程。 相比现有语言服务进程,此进行对系统资源的影响小得多。 但是,如果想要禁用新进程,请在“工具”>“选项”>“文本编辑器”>“JavaScript/TypeScript ”>“语言服务”中勾选“禁用专用语法进程”方框

Visual Studio Web 工具

库管理器是 Visual Studio 2017 中包含的新功能。 有助于在 Web 项目中管理客户端端库。

容器工具

我们为 ASP.NET Core Web 项目添加了一个新项目 Docker 容器体验。 这补充了基于 Docker Compose 的现有容器工具,并提供了更简单便捷的方法直接从 Visual Studio 创建、调试和生成 Docker 容器。

创建项目时,可以添加 Docker 支持(图 13):

Enable Docker Support
(图 13)启用 Docker 支持

或者,可以通过解决方案资源管理器中的项目上下文菜单为现有项目启用 Docker 支持(图 14)。 一旦执行此操作,Visual Studio 将在项目中创建单个 Dockerfile。 可以选择 Windows 还是 Linux。

Add Docker Support
(图 14)添加 Docker 支持

Visual Studio 还为 Docker 添加了调试器启动配置文件(图 15),以便项目在容器内运行时可对其进行调试

Docker Launch Profile
(图 15)Docker 启动配置文件

如果有带多个 Docker 项目的解决方案,默认情况下,选择启动解决方案时只有一个容器运行。 如果想要同时运行多个容器,可在解决方案资源管理器中右键单击该解决方案,然后选择“设置启动项目”、“多个启动项目”,然后对要运行的所有项目将“操作”下拉列表设置为“启动”或“启动(不调试)”

容器化项目按所需方式运行后,如果准备好将项目推送到 Azure 容器注册表或 DockerHub,则可以右键单击该项目并选择“生成 Docker 映像”以本地生成映像。

此外可以通过新的“容器业务流程协调程序支持”选项将现有的基于 Compose 的 Docker 功能添加到 ASP.NET Core Web 项目中(图 16)。 在解决方案资源管理器中右键单击 ASP.NET Core Web 项目,选择“添加”>“容器业务流程协调程序支持”,然后从下拉列表菜单中选择“Docker Compose”

Add Container Orchestrator Support
(图 16)添加业务流程协调程序支持

发布改进

此版本包含以下发布改进:

  • 将 Docker 容器发布到容器注册表时,现在可以自定义映像的标记。 可以手动添加标记(默认为“最新”),或使用自动生成的标记来确保每个标记是唯一的。
  • 创建新的 Azure 应用服务时,还可以配置 Application Insights 以自动收集遥测。 如果选择的区域也有 Application Insights,则默认启用。 如果选择的区域尚不包含 Application Insights,可以从下拉列表中为 Application Insights 资源手动指定其他区域。
  • 发布 Azure Functions 项目时,可以选择使用新的 Run-From-Zip 功能进行发布。

Visual Studio Tools for Xamarin

此版本包含以下 Xamarin 更新:

  • 添加了对 Xcode 9.4 的支持。
  • 创建新的 Xamarin.Forms 项目时,默认代码共享选项现在为 .NET Standard。 共享项目选项仍然可用。
  • 添加了 Android 增量生成的改进。 Xamarin.Android 利用在中间输出目录中生成的文件实现了比完整生成更快的增量生成。 以前,如果更改了项目的目标框架,它将使文件无效并在下次运行时实现完整生成。 在此版本中,现保留每个框架文件夹中的文件,这样你可以在不同的目标框架之间进行切换,并且仍可使用增量生成。 通过清理项目,你可以回收保留的文件所占用的磁盘空间。
  • 我们在 Visual Studio 2017 中添加了对 Xamarin.Mac 绑定项目的最低支持。 这样,Visual Studio 就可加载 Xamarin.Mac 绑定项目并将其识别为“已受支持”。 此外还可以生成 Xamarin.Mac 绑定项目。 不过是在本地执行生成过程而不是使用本机 Mac 工具链,因此在应用中运行或调试时,不能使用生成的 IL 程序集。

Hyper-V Android Emulator 支持

此版本增加了在 Windows 10 的 2018 年 4 月更新上运行时支持使用与 Hyper-V 兼容的 Google Android 仿真器(图 17)。 这样,你可以将 Google Android Emulator 与其他基于 Hyper-V 的技术(例如 Hyper-V 虚拟机、Docker 工具和 HoloLens 模拟器等)并行使用。 现向使用 Hyper-V 的移动应用开发人员提供一款快速运行的 Android 模拟器,该模拟器始终支持最新的 Android API、可与现有的 Google Play Services 配合使用,同时支持 Android Emulator 的各项功能(例如照相机、地理位置和快速启动)。

Screenshot of both the Google Android emulator and HoloLens emulator running at the same time.
(图 17)Google Android Emulator 和 HoloLens 仿真器

Xamarin.Android 设计器

显著改善了 Xamarin.Android 的设计器体验。 亮点包括:

  • 引入了拆分视图编辑器,可用于同时创建、编辑和预览布局(图 18)
Screenshot of the Xamarin.Android split-view editor.
(图 18)Xamarin.Android 拆分视图编辑器
  • 改善了 IntelliSense 体验,同时提升了自定义控件的可靠性。
  • 支持对系统提供的值使用示例数据。

Xamarin.Forms 预览器

当使用 Xamarin.Forms 3.1.0.583944 版或更高版本时,Xamarin.Forms 预览器现提供工具箱支持。 Xamarin.Forms 控件将在工具箱中显示,这让工具箱新手们能更轻松地找到它们。 还可将控件拖放到 XAML 代码编辑器中,从而在页面上添加控件。 Xamarin.Forms 预览器现在属于 XAML 编辑器。 可通过编辑器窗格边缘上的展开图标来打开和关闭它。

Python

此版本为 Python 开发人员添加了以下改进功能:

  • Python IntelliSense 现使用 typeshed 定义为无法通过静态分析推断出自动完成的库提供更丰富的结果。
  • 试验性调试器在 15.7 预览版中首次推出,它现在是 Python 使用的默认调试引擎,为 Python 代码提供更快、更可靠的调试。
  • 增添了对 Python 3.7 的支持且附带修补程序,可实现调用附加功能、分析功能和混合模式(跨语言)调用功能。
  • 要详细了解上述功能,请务必查看 Visual Studio 2017 15.8 版中的 Python 博客文章。

迁移本地 Azure 函数设置

发布摘要页中提供的“托管应用程序设置”对话框现可显示 local.settings.json 文件中的值,且支持你将这些值迁移到 Azure 中托管的远程 Azure 函数应用。

连接的服务

对于 Azure 函数项目的解决方案,现可直接通过 Visual Studio 2017 配置 Azure Functions 的持续交付。

测试资源管理器改进

选中层次结构视图中的某个分组时,测试资源管理器现显示更详细的测试状态摘要窗格(测试资源管理器的下窗格)。 该窗格现显示该分组中失败、通过或未运行的测试数量。

新的扩展性功能

语言服务器协议

Visual Studio 现提供针对语言服务器协议的本机支持。 扩展作者可创建扩展,用于与现有语言服务器进行通信,从而向 Visual Studio 添加其他语言支持。 扩展用户可安装这些扩展,从而开始在 Visual Studio 中使用自己熟悉的语言(如 Rust)。

AsyncPackage 模板

扩展作者现可通过项模板创建 AsyncPackage,从而优化其扩展的性能。 详细了解AsyncPackages

扩展包

借助扩展包,可轻松共享自己偏好的一组扩展或设置新的带有所有扩展的 Visual Studio 安装。 利用扩展包,可创建扩展列表、将其打包在扩展中,并使用列表快速批量安装这些扩展。

命令行扩展发布

使用命令行将扩展发布到 Visual Studio Marketplace。

.NET Core SDK 2.1.400

Visual Studio 2017 15.8 版包括 .NET Core SDK 2.1.400。 新的 SDK 功能包括:

  • 添加了 NUnit 模板
  • 添加了对已签名的全局工具的支持
  • 改进了帮助文本,使其更加清晰明了

解决了 .NET Core CLI 上的 32 个问题。
解决了 .NET Core SDK 上的 20 个问题。

源代码管理

对于 .NET Core 项目,通过文件资源管理器直接添加到项目的文件现可在解决方案资源管理器中显示正确的 Git 和 TFS 跟踪图标,而无需重新加载解决方案。

.NET 测试适配器扩展

.NET 测试适配器具有以下中断性变更和弃用:

  • 中断性变更:所有测试项目必须在其 csproj 中包含各自的 .NET 测试适配器 NuGet 引用。 如果未包含,在生成之后启动测试适配器扩展的发现或用户尝试运行所选测试时,项目中将显示以下测试输出:
    • 测试项目 {<测试项目的完整路径>} 不引用任何 .NET NuGet 适配器。 测试发现或执行可能不适用于此项目。 建议在解决方案的每个测试项目中引用 NuGet 测试适配器。
  • .NET 测试框架已在 NuGet 包中发布其适配器,且已迁出 Visual Studio 扩展。 弃用了通过扩展提供的 .NET 测试适配器支持(不过仍受支持)。 这意味着可通过“工具”>“选项”>“测试”使用两个新选项
    • 通过第一个选项,Visual Studio 只能使用它在测试程序集文件夹(由测试适配器 NuGet 引用填充)中发现的或 runsettings 文件中指定的测试适配器。
    • 通过第二个选项,Visual Studio 可“回退”至之前的行为,并为不具备测试适配器 NuGet 引用的项目搜索测试适配器扩展。 默认勾选这两个选项,因此在该版本中,默认行为保持不变。
  • 请注意:非 .NET 测试适配器不受此更改的影响。

ASP.NET .NET Framework 机密支持

对于面向 .NET Framework 4.7.1 或更高版本的 ASP.NET .NET Framework 项目,现可通过右键单击项目并选择“托管用户密码”,打开源代码中不需要的密码并将其存储到 usersecrets.xml 中。

提高 ASP.NET .NET Framework 性能

如果引用的 .NET 编译器包在 ASP.NET .NET Framework 项目中已过时,Visual Studio 将在你打开项目时提示你升级此包以提高生成性能

.NET Framework 4.7.2

Visual Studio 2017 15.8 版现向所有受支持的平台提供 .NET Framework 4.7.2(包括 4.7.2 运行时)。 .NET Framework 4.7.2 提供多项新功能和改进功能,还有大量可靠性、稳定性、安全性和性能方面的修补程序。

有关 .NET Framework 4.7.2 的更多详细信息,可参阅以下文章:

延迟包加载

Visual Studio 现延迟加载配置为自动加载的异步包,直到 Visual Studio IDE 完全启动且解决方案加载完毕为止。 此项更改不影响以同步方式自动加载的包。 用户可查看状态栏左下角的“任务状态中心”来监视进度。 创建 asyncpackage 的扩展作者应测试其扩展。 有关详细信息,请参阅 Improving the responsiveness of critical scenarios by updating auto load behavior for extensions(通过更新扩展的自动加载行为来提高关键方案的响应能力)。


---

Release Notes IconVisual Studio 2017 版本 15.8 安全公告通知

Visual Studio 2017 版本 15.8.7 服务版本-- 发布于 2018 年 10 月 10 日

CVE-2018-8292 .NET Core 信息泄漏漏洞

如果 HTTP 身份验证信息在遇到 HTTP 重定向的出站请求中无意间公开,.NET Core 中存在安全功能绕开漏洞。 成功利用此漏洞的攻击者可以使用此信息进一步攻击 web 应用。 此安全更新通过纠正 .NET Core 应用程序处理 HTTP 重定向的方式解决此漏洞。

Visual Studio 2017 版本 15.8.4 服务版本-- 发布于 2018 年 9 月 11 日

CVE-2018-8409 .NET Core 拒绝服务漏洞

当 System.IO.Pipelines 未正确处理请求时,在 .NET Core 2.1 中将存在拒绝服务漏洞。 如果攻击者成功利用此漏洞,可能会导致对利用 System.IO.Pipelines 的应用程序拒绝服务。 可以远程利用漏洞,无需进行身份验证。 远程未经过身份验证的攻击者可以通过向应用程序提供特制请求来利用此漏洞。

CVE-2018-8409 ASP.NET Core 拒绝服务漏洞

未正确处理 Web 请求时,在 ASP.NET Core 2.1 中将存在拒绝服务漏洞。 如果攻击者成功利用此漏洞,可能会导致对 ASP.NET Core Web 应用程序拒绝服务。 可以远程利用漏洞,无需进行身份验证。 远程未经过身份验证的攻击者可以通过向 ASP.NET Core 应用程序提供特制 Web 请求来利用此漏洞。

Visual Studio 2017 15.8 版 - 发布于 2018 年 8 月 14 日

CVE-2018-0952 诊断中心标准收集器特权提升漏洞

Visual Studio 服务中存在一个特权提升漏洞,这可能会导致非管理员用户在编写文件时获得系统特权。 攻击者利用这一点后,即使只具有用户级别的访问权限,也可将文件写为系统。 此安全更新通过模拟当前用户来验证文件位置的访问权限,解决了此问题。

Visual Studio 2017 版本 15.8 预览版 4 - 发布于 2018 年 7 月 10 日

CVE-2018-8172 Visual Studio 远程代码执行漏洞

远程执行代码漏洞可打开特制项目或资源文件来利用用户的计算机。 此次安全更新通过更正 Visual Studio 检查文件源标记的方式来解决该漏洞。

CVE-2018-8260 .NET Framework 远程代码执行漏洞

.NET 软件中存在远程执行代码漏洞,攻击者可利用此漏洞在当前用户的上下文中运行任意代码,以此利用用户计算机。 此次安全更新通过更正 .NET 检查文件源标记的方式来解决该漏洞。

CVE-2018-8232 .NET Microsoft 宏汇编程序篡改漏洞

与 Microsoft 宏汇编程序相关的篡改漏洞未正确验证代码。 此次安全更新通过确保 Microsoft 宏汇编程序正确验证代码逻辑来解决该漏洞。

CVE-2018-8171 ASP.NET Core 安全功能绕过漏洞

未验证错误登录尝试次数时存在 ASP.NET Core 安全功能绕过漏洞,这可能导致攻击者无限次尝试进行身份验证。 此次更新通过验证错误登录尝试次数来解决该漏洞。

Visual Studio 2017 版本 15.8 预览版 3 - 发布于 2018 年 6 月 26 日

CVE-2018-11235 针对 Git 安全漏洞的 Microsoft 安全公告

我们修复了 Git 中由 Git 社区披露的安全漏洞。 当用户克隆恶意存储库时,该漏洞可导致执行任意代码。

Visual Studio 2017 版本 15.8 预览版 1 - 发布于 2018 年 5 月 08 日

CVE-2018-0765 针对 .NET Core 拒绝服务漏洞的 Microsoft 安全公告

  • Microsoft 发布此安全公告的目的在于提供有关 .NET Core 和 .NET 本地版本 2.0 中的漏洞的信息。 此公告还可指导开发者更新其应用程序,以消除此漏洞。
  • Microsoft 了解到,.NET Framework 和 .NET Core 未正确处理 XML 文档时,会出现漏洞拒绝服务。 如果攻击者成功利用此漏洞,可能会导致对 .NET Framework、.NET Core 或 .NET 本地应用程序拒绝服务。
  • 此次更新更正了 .NET Framework、.NET Core 和 .NET 本地应用程序对 XML 文档处理的操作方式,从而解决了此漏洞。
  • 如果是 ASP.NET Core 应用程序,还建议开发人员更新到 ASP.NET Core 2.0.8。

Release Notes IconVisual Studio 2017 15.8.1 版

发布日期:2018 年 8 月 17 日

15.8 1 版中解决的首要问题

以下问题已在 15.8.1 版中得到解决:

  • 修复了在调试 Web 项目时关闭浏览器窗口时意外关闭 Visual Studio 的问题。

Release Notes IconVisual Studio 2017 版本 15.8.2

发布日期:2018 年 8 月 28 日

15.8.2 版中解决的首要问题

15.8.2 版中解决了客户报告的下列问题:


Release Notes IconVisual Studio 2017 版本 15.8.3

发布时间:2018 年 9 月 6 日

15.8.3 版中解决的首要问题

15.8.3 版中解决了客户报告的下列问题:


Release Notes IconVisual Studio 2017 版本 15.8.4

发布时间:2018 年 9 月 11 日

15.8.4 版中解决的首要问题

15.8.4 版中解决了客户报告的下列问题:

安全公告通知


Release Notes IconVisual Studio 2017 版本 15.8.5

发布日期:2018 年 9 月 20 日

15.8.5 版中的最近更新汇总

  • Visual Studio Tools for Xamarin 现支持 Xcode 10。

15.8.5 版中解决的首要问题

15.8.5 版中解决了客户报告的下列问题:

15.8.5 中新增功能的详细信息

Visual Studio Tools for Xamarin

Visual Studio Tools for Xamarin 现支持 Xcode 10,这使你可为 iOS 12、tvOS 12 和 watchOS 5 生成和调试应用。 有关可用新功能的更多详细信息,请参阅使用 iOS 12 的准备工作我们对 iOS 12 的介绍


Release Notes IconVisual Studio 2017 版本 15.8.6

发布日期:2018 年 10 月 2 日

15.8.6 版中的最近更新汇总

15.8.6 版中解决的首要问题

15.8.6 版中解决了客户报告的下列问题:

15.8.6 版中新增功能的详细信息

适用于通用 Windows 平台开发人员的最新 Windows 10 SDK

最新的 Windows 10 SDK(版本 17763)现在作为通用 Windows 平台开发工作负载中的可选组件提供。 可以通过选择“Windows 10 SDK (10.0.17763.0)”复选框将此 SDK 添加到工作负载。


Release Notes IconVisual Studio 2017 版本 15.8.7

发布日期:2018 年 10 月 10 日

15.8.7 版中的新增功能

Azure DevOps

Visual Studio Team Services 现在是 Azure DevOps! 你将在团队资源管理器以及 Visual Studio 的引用中看到此品牌。

安全公告通知

CVE-2018-8292 .NET Core 信息泄漏漏洞


Release Notes IconVisual Studio 2017 版本 15.8.8

发布日期:2018 年 10 月 24 日

15.8.8 版中解决的首要问题

15.8.8 版中解决了客户报告的下列问题:


Release Notes IconVisual Studio 2017 版本 15.8.9

发布日期:2018 年 11 月 2 日

15.8.9 版中解决的主要问题

15.8.9 版中解决了客户报告的下列问题:


已知问题

查看 Visual Studio 2017 版本 15.8 中全部现有已知问题和可用解决办法。

Visual Studio 2017 Known Issues


反馈和建议

我们期待你的宝贵意见和建议! 如有问题,请通过安装程序或 Visual Studio IDE 右上角的“报告问题”选项告知我们。 Report a Problem Icon图标位于右上角。 可以在 Visual Studio 开发者社区中提出产品建议或跟踪问题,也可在其中提问、寻找答案和建议新功能。 此外,还可通过实时聊天支持获得免费安装帮助。


Blogs

通过参考开发人员工具博客网站中的见解和建议,随时掌握所有新版本的最新最全资讯,并发表有关大量功能的深入分析帖子。

Developer Tools Blogs


Visual Studio 2017 发行说明历史记录

若要详细了解以往 Visual Studio 2017 版本的相关信息,请参阅 Visual Studio 2017 发行说明历史记录页。


返回页首