Visual Studio Icon Visual Studio 2017 版本 15.8 发行说明

注释

Visual Studio 2017 支持的版本为版本 15.9。

重要

这不是 Visual Studio 的最新版本。 若要下载最新版本,请访问 https://visualstudio.microsoft.com/downloads/ 并查看 Visual Studio 2022 发行说明

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 中修复的所有客户报告的问题。

开发者社区门户


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

发行说明图标 Visual Studio 2017 版本 15.8.0

发布日期:2018 年 8 月 14 日

15.8 版中的新增功能

Install

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

  • 若要使用此新选项,请在安装程序中选择“全部下载,然后安装”选项(图 1)。 如果 Internet 连接速度较慢,建议使用此选项。
  • 默认选项保持“下载时安装”,该选项并行下载并安装。
下载 Otion
(图 1)下载选项

Performance

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

  • C#、VB 和 C++ 项目的分支切换对于大型解决方案来说要快得多,因为不再需要解决方案重新加载。
  • 我们将大型解决方案中的一小部分 C# 和 VB 项目卸载和重新加载的时间从几分钟缩短到数秒。
  • 我们添加了一个选项,用于禁用在上一个会话中打开的文档,因为重新打开某些类型的文件或设计器可能会延迟解决方案加载。
    • “工具选项>项目>解决方案>常规”>中切换此选项。

测试性能

在包含多个测试项目的大型解决方案中运行几个测试时,我们显著提高了性能。 在我们的实验室中,具有 10,000 多个 MSTest 的解决方案执行了最多 82 个% 更快的单个测试!

Visual Basic 性能改进

使用模式 CInt(Fix(number)) 从非整数类型转换为整数时,Visual Basic 现在可显著提高性能。

性能分析

此版本包含以下性能分析增强功能:

  • 我们添加了以暂停状态启动分析的功能:

    • 性能探查器(ALT-F2)中的 CPU 使用率工具现在可以处于暂停状态 (图 2)启动。 在等待值得进行 CPU 使用率调查的方案时,这非常有用。 如果在启动时禁用 CPU 使用率收集,则性能探查器不会收集任何 CPU 使用情况示例堆栈数据,直到它被专门启用。 这会导致收集和分析的数据量较小,从而使性能调查更高效。

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

      “CPU 使用情况工具设置”页
      (图 2)CPU 使用情况工具设置
    • 启动目标应用程序(单击“性能探查器启动”页上的“ 开始 ”)后,会看到 CPU 使用率图 (图 3), 用于控制 CPU 分析。 若要启用 CPU 使用情况示例堆栈数据收集,请在视图中间选择“ 启用 CPU 分析 ”,或单击 CPU 使用率图下方的 “记录 CPU 配置文件 ”。 可以单击 “记录 CPU 配置文件 ”以根据需要多次启用/禁用示例数据收集。 CPU 使用率图形颜色会更改,以指示是否在该时间点启用/禁用示例收集。

      CPU 使用情况工具监视视图
      (图 3)CPU 使用率图
  • 我们添加了 .NET 对象分配跟踪工具:

    • .NET 对象分配跟踪工具联接性能探查器中可用的工具系列。 为性能探查器会话调用此工具会针对目标应用程序中发生的每个 .NET 对象分配启动堆栈跟踪的集合。 此堆栈数据与对象类型和大小信息一起进行分析,以显示应用程序内存活动的详细信息。 可以快速确定代码中的分配模式并识别异常。 此外,对于垃圾回收(GC)事件,可以轻松确定收集并保留哪些对象,并快速识别主宰应用程序的内存使用情况的对象类型。
    • 这对于 API 编写器特别有用,可帮助最大程度地减少分配。 许多应用程序将超过诊断数据收集中涉及的缓冲区限制,但可以很好地诊断执行 API 关键方案的小型测试应用程序。 在测试应用程序执行时,性能探查器会显示实时对象的折线图(计数),以及对象增量(% 更改)条形图。
    • 若要使用 .NET 对象分配跟踪工具,请显示性能探查器启动页 (图 4),选择要分析的目标(默认目标是解决方案中的启动项目),请检查可用工具下的 .NET 对象分配跟踪 ,然后单击“ 启动”。
    性能探查器启动页
    (图 4)性能探查器启动页

性能分析 (CPU 使用率)

此版本对性能探查器的 CPU 使用率工具进行了以下改进(通过 ALT-F2 提供):

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

生产力

此版本包含以下生产力增强功能:

  • 可以使用 格式文档Ctrl + K、DCtrl + E、D)执行其他代码清理,以便进行 C# 开发。 转到 “工具>选项>文本编辑器>”C#>代码样式>格式设置>常规来配置清理。
  • 我们使用 Ctrl +Alt + Enter 添加了更多重构和快速作:
    • Invert 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 + UpArrow)可让你快速导航到封闭代码块的开头。
    • 转到“下一/上一问题”(Alt + PgUp/PgDn),可以跳到下一/上一个问题(错误、波形曲线、灯泡)。
    • 转到成员(Ctrl + T,M)现在默认限定为文件。 可以通过将作用域切换为当前文档(Ctrl + Alt + C)来将默认值更改回解决方案。
  • 现在可以在具有多个插入点支持的文件中的多个任意位置创建插入点和选择。 这样,就可以同时在多个位置添加、编辑或删除文本。
    • 使用 Ctrl + Alt + LeftMouseClick 插入插入符号。
    • 在与当前所选内容匹配的下一个位置添加选定内容和插入符号, 并用 Shift + Alt + Ins 匹配。
    • 有关作的完整列表,请参阅 “编辑 > 多个插入点 ”。
  • 使用 Alt + '访问上下文导航菜单。
  • 使键绑定与两个新的键盘配置文件保持一致:Visual Studio CodeReSharper (Visual Studio)。 可以在 “工具 > 选项 > 环境 > 键盘 ”和顶部下拉菜单下找到这些方案。

调试

此版本包含以下调试增强功能:

  • 安装多个 Visual Studio 2017 实例后,现在可以选择要在调试时将扩展部署到的实例(图 5)。 例如,这样就可以在预览频道中进行调试时在 Visual Studio 发布通道中进行开发。

    选择调试实例
    (图 5)选择调试实例
  • 现在可以直接从“发布摘要”页 (图 6)附加快照调试器。

    从“发布摘要”页附加快照调试器
    (图 6)从发布摘要附加快照调试器
  • 现在支持通过“任务”窗口查看托管任务,同时通过堆调试微型转存。

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

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

  • 现在可以在属性检查器中编辑集合。
  • 设计器现在允许编辑模板和样式,包括在其他文档中定义这些实体的定义时。
  • IconElement 类型的属性(如 AppBarButton 中的 Icon)现在在属性检查器中具有自定义编辑器,使这些属性更易于设置。
  • 设计器、编辑器和“编辑并继续”现在都应使用 x:DefaultBindMode 正常工作。
  • Blend 中的 Visual State Manager 体验现在支持 AdaptiveTrigger。

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

我们引入了此版本的 F# 语言版本 4.5。 这还对应于新的 4.5.x 系列 FSharp.Core(F# 核心库)。 可以读取 F# RFC 存储库中每个更改的规范。 此版本还对 Visual Studio 的 F# 工具进行了许多改进。

F# 4.5

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

Span'T<> 支持

我们实现了Span<'T>和相关功能,以便 F# 使用SpanMemoryref和类似构造的有效使用和生产 API。 此功能的功能包括:

  • voidptr 类型。
  • FSharp.Core 中的新增 NativePtr.ofVoidPtr 功能和 NativePtr.toVoidPtr 函数。
  • 新类型和inref<'T>outref<'T>(分别为只读 byref 和只读 byrefs)。 这对应于 in ref C# 和 out ref C# 中。
  • 生成 ByRefLike 结构(如 SpanReadOnlySpan)的能力。
  • 生成 IsReadOnly 结构的能力。
  • 从方法隐式取消引用 byrefinref-returns。
  • 在 . 上byref/inref/outref生成扩展成员的功能。

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

此外,此功能集还修复了 F# 编译器中可能存在“邪恶结构替换”的 bug;例如,对 F# 结构调用方法可以替换用其他结构调用的实际结构。 this结构上的参数现在被视为一个inref<MyStruct>,并显示一个错误,建议在修改结构时添加可变字段。

可以在 span 中了解有关此功能集的构造的详细信息ref类似构造。

火柴! 计算表达式中的

F# 4.5 引入了 match!一个新的关键字,用于计算表达式,完全由 John Wostenberg 贡献。 这种语法糖相当于 let! 结果的后跟 match 。 可以在 RFC 中了解详细信息 match!

放宽使用序列、列表和数组表达式进行向上转换 yield 的需求

F# 4.5 现在会放宽某些情况,即在使用 yield 时需要向上转换将子类型转换为超类型。 由于 F# 3.1 不使用yield时,这些表达式尚不需要此限制,因此这会使事情与现有行为更加一致。 可以在 RFC 中了解有关此功能的详细信息。

允许对列表和数组括号进行缩进

F# 4.5 现在会放宽列表和数组括号的缩进规则,这些规则要求它们在自己的行上向前缩进一个范围。 上述要求一直相当令人困惑,尤其是对于 F# 初学者而言。 此外,F# 序列表达式不需要它。 现在,这会将数组和列表表达式置于与序列表达式相同的一致状态。 可以在 RFC 中了解有关此功能的详细信息。

以公共形式发出的枚举事例

F# 4.5 现在在所有情况下以公共形式发出枚举事例,以符合 C# 发出枚举事例的方式。 这也使分析工具能够更轻松地分析来自 F# 代码的日志,其中发出了值而不是标签名称。 可以在 RFC 中了解有关此功能的详细信息。

F# 编译器改进

除了前面提到的语言功能外,F# 编译器的改进还位于 F# 4.5 中。 这些包括:

  • 我们改进了编译器性能,方法是删除 F# 编译器中所有分配的最多 2.2%(在各种情况下)。
  • 我们修复了一个 bug,导致在AccessViolatioNException与基于结构枚举的枚举一起使用时产生yield!
  • 现在可以再次继承 FSharpFunc
  • 默认情况下,对于 .NET Core 的 F# 调试版本,将禁用尾部调用。 它们已启用发布,因此与桌面 F# 编译器匹配。
  • F# 引用规范化已修复,可用于控制写入到输出文件的可传递程序集引用。 这样,就可以在 .NET Core 上执行程序集重定向的等效项。
  • 我们修复了在尝试在内联函数上使用动态调用时使用的错误消息被忽略的 bug。 错误消息现在传播。
  • F# 现在遵循可以在项目文件中设置的 WarningsNotAsErrors 标志。
  • 当模式匹配的分支不返回相同的错误消息类型条件时, Isaac Abraham 已更新为更友好。
  • Steffen Forkmann 修复了缺少重载方法实现的编译接口实现时出现内部错误 bug。
  • Gauthier Segay 删除了编译器的词法阶段中的一些不必要的数组复制。
  • F# 枚举上的不完整模式匹配现在会生成详细的警告,该警告提供了 约翰·沃滕贝格贡献的案例示例。
  • 蒂亚斯·迪蒂里奇贡献的 #nowarn“2003”现在受到尊重。
  • Steffen Forkmann 修复了使用 C# 扩展方法可能失败的 Bug。F# 重载解析已修复。
  • Steffen Forkmann 修复了内部 QueueList 数据结构 bug。
  • Steffen ForkmannEugene Auduchinokncave 贡献了各种较小的优化和代码清理工作。

F# 核心库 4.5.x

F# 核心库的以下新增功能现已推出:

  • 为改进计算表达式的 async { } 堆栈跟踪做了大量工作。 现在应该能够在堆栈跟踪中看到用户代码和用户行号。 可以在 RFC 中了解有关此功能的详细信息。
  • FuncConvert.FromFunc以及FuncConvert.FromAction类型和System.FuncSystem.Action重载的 API,可帮助与 C# 进行互作。 可以在 RFC 中了解有关此功能的详细信息。
  • ValueOption 是一种可用的新类型,这是一组未来功能中的第一个功能,旨在提高活动模式的性能。 可以在 RFC 中了解有关此功能的详细信息。
  • TryGetValue 现在是 F# 映射类型上的新成员。 可以在 RFC 中了解有关此功能的详细信息。
  • 修复了首次调用 MailboxProcessor.TryReceive时 CPU 使用率过高的问题。
  • 比较现在 bool 使用快速泛型比较, 由 Vasily Kirichenko 贡献。
  • Array.allPairs贡献的摘要文本已更新为正确

F# 工具改进

此版本包含 F# 工具中的显著改进,例如性能增强功能和一些新的编辑器功能。 与往常一样,F# 开源社区提供大量贡献。 以下是一些亮点:

  • 我们改进了所有表单的 .NET SDK 样式项目的 IntelliSense 性能,包括那些使用多目标的项目。
  • Vasily KirichenkoSteffen ForkmannGauthier Segay 贡献了一项社区驱动的努力,用于分析和改进非常大文件的 IntelliSense 性能。 非常大的文件(10k+ 代码行)中的 IntelliSense 现在大致是速度的两倍。
  • .NET SDK 样式项目中不再存在过时的 FSharp.Core 警告(尽管已安装包)。
  • 在 IntelliSense 中显示成员 . 的 XML 文档的说明工具提示在 10 秒后不再超时。
  • 修复了无法在对象构造函数参数中设置断点的 bug。
  • 修复了重命名的符号时将重复其为泛型参数的 bug。
  • .NET Framework(经典 F# 模板)的模板现在使用 NuGet 包中的 FSharp.Core,以便与 .NET SDK F# 模板保持一致。
  • 自动、事务大括号完成现在可用于 ()[]{}[||][<>] 大括号对。 我们与 吉布兰·罗莎合作做了这项工作。
  • 现在可以使用 Ctrl + 单击 F# 符号转到定义。 “工具选项”>窗口中也遵循此手势的设置。
  • IntelliSense 性能 UI 已修改,以允许配置各种 IDE 功能的过时类型检查信息。 每个选项的说明现在都以设置的工具提示提供。
  • 大括号匹配突出显示现在正确突出显示大括号,与 瓦西利基里琴科协作完成。
  • 现在,当以递归方式定义类型时,转到定义正确, 由 Vasily Kirichenko 提供。
  • 当文件顶部为空时,自动导入的命名空间未打开的 bug 已被 Vasily Kirichenko 修复。
  • 瓦西利·基里琴科修复了一个 bug printf ,其中含有点的说明符被 瓦西利·基里琴科修复。
  • Vasily Kirichenko 修复了一个 bug,其中所有打开都被视为在递归模块内未使用。
  • Vasily Kirichenko 显著提高了未使用的 Opens 分析器的性能。
  • 属性的自动完成现在仅建议由 Vasily Kirichenko 提供的实际属性的选项。
  • 签名帮助工具提示现在为 Vasily Kirichenko 提供的构造函数调用站点上的类型提供程序静态参数生成。
  • Vasily Kirichenko 修复了一个 bug,其中用作度量单位的值类型被着色为引用类型。
  • Vasily Kirichenko 修复滚动时,语义着色可能会消失某些文件的 bug。
  • 现在有一个实验性 CodeLens 实现,由 维克多·彼得·鲁文·梅勒贡献。 可以在 “选项 > 文本编辑器 > F# > 代码镜头”中打开它。
  • 塞巴斯蒂安·厄本修复了 F# 编译器服务错误地将 XML 文档中的模块名称滑行的 bug。
  • 与后续Dictionary调用一ContainsKeyItem起使用的代码已更改为使用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.fsi、和。 mailbox.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 格式配置。
  • 已将随附 clang-format.exe 版本更新为 6.0.0。
  • 用于简化向 CppProperties.json添加配置的模板。
  • 添加了模板以简化向 CMakeSettings.json添加配置(图 7)。
CMake 的配置模板
(图 7)CMake 的配置模板

C++生产力

我们对C++工作效率进行了以下改进和改进:

  • C++宏上的快速信息工具提示 现在显示其扩展内容,而不仅仅是其定义。 这对于引用其他宏的复杂宏特别有用,因为它阐明了预处理器所替换的宏标识符。
  • 添加了新的快速修复灯泡,用于将基本 宏转换为 constexpr ,作为新工具实现代码现代化。
  • IntelliSense for templates 提供了有关模板参数的更多详细信息,以充分利用模板正文中的 IntelliSense(图 8)。
模板 IntelliSense
(图 8)模板 IntelliSense
  • 我们正在努力刷新 代码分析体验。 现在可以在 工具>选项>文本编辑器>C++>Experimental>代码分析下启用新的正在进行的功能。 打开或保存文件时,代码分析可以在后台运行,结果显示在错误列表中,并在编辑器中显示为绿色波浪线(图 9)。
编辑器内代码分析
(图 9)编辑器中代码分析

C++调试改进

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

  • 现在,除了 在调用堆栈窗口中折叠这些调用之外,还可以从系统或第三方C++库逐步执行代码。 使用 /JMC 编译代码并在 .natjmc 文件中指定非用户库路径时,可以控制任何C++库的行为。 如果系统库调用用户代码,当你单步执行时,调试器将跳过所有系统代码,并在用户代码回调的第一行( 图 10)上停止。
仅我的代码
(图 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”路径下现在将有“基本 Vue.js Web 应用程序”模板。 下面显示了在 .vue 文件( 图 11)的脚本块内编辑 TypeScript 代码的示例。

编辑 .vue 文件
(图 11)编辑 .vue 文件

ESLint 改进

我们重新实现对此版本的 ESLint 支持。 ESLint 具有以下改进和增强功能:

  • Visual Studio 现在还会在编辑时对 JavaScript 文件进行 lint 处理,而不是仅对保存的文件进行 lint 处理。
  • 可以报告项目中所有 JS 文件的结果,而不仅仅是打开文件;如果项目的某些部分不想被骗,则现在可以使用 .eslintignore 文件来指定应忽略的目录和文件。
  • 默认情况下,ESLint 已更新为使用 ESLint 4,但如果项目具有 ESLint 的本地安装,它将改用该版本。

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

ESLint 选项
(图 12)ESLint 选项

打开 Node.js 文件夹改进

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

有关详细信息,请参阅 在没有解决方案或项目的情况下在 Visual Studio 中开发 JavaScript 和 TypeScript 代码

编辑器性能改进

在以前的版本中,所有 JavaScript 和 TypeScript 语言服务作都由单个 Node.js 过程提供服务。 如果发送了影响用户键入的命令(例如在换行后自动设置格式),而进程内可能较长的作(例如分析代码是否存在错误),则可能会导致编辑器延迟。 为了缓解这种情况,现在使用单独的进程来处理影响编辑最多的作。 此过程在系统资源上明显比现有语言服务进程更轻。 但是,如果要禁用新进程,请检查”中的>框。

Visual Studio Web 工具

库管理器是 Visual Studio 2017 中包含的新功能。 它可帮助你管理 Web 项目中的客户端库。

容器工具

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

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

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

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

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

Visual Studio 还会为 Docker 添加调试器启动配置文件 (图 15), 以便在容器中运行时调试项目。

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

如果解决方案具有多个 Docker 项目,则默认情况下,在选择启动解决方案时,仅运行一个容器。 如果要同时运行多个容器,可以在解决方案资源管理器中右键单击解决方案,然后选择“ 设置启动项目 ”,然后选择 “多个启动项目”,然后将 下拉列表设置为“ 启动 ”或 “启动”,而不调试 要运行的所有项目。

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

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

添加容器业务流程协调程序支持
(图 16)添加业务流程支持

发布改进

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

  • 将 Docker 容器发布到容器注册表时,现在可以自定义映像的标记。 可以手动添加标记(默认值为“latest”),也可以使用自动生成的标记来确保每个标记是唯一的。
  • 创建新的 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 仿真器支持

此版本增加了对在 Windows 10 2018 年 4 月更新(图 17)上运行时与 Hyper-V 兼容的 Google Android 模拟器的支持。 这样,便可以将 Google 的 Android 模拟器与其他基于 Hyper-V 的技术并排使用,包括 Hyper-V 虚拟机、Docker 工具、HoloLens 模拟器等。 使用 Hyper-V 的移动应用开发人员现在有权访问始终支持最新 Android API 的快速 Android 仿真器、现装与 Google Play Services 配合使用,并支持 Android 模拟器的所有功能,包括相机、地理位置和快速启动。

同时运行的 Google Android 模拟器和 HoloLens 模拟器的屏幕截图。
(图 17)Google Android Emulator 和 HoloLens Emulator

Xamarin.Android Designer

我们对 Xamarin.Android 的设计器体验进行了重大改进 。 亮点包括:

  • 引入了拆分视图编辑器,允许同时创建、编辑和预览布局(图 18)。
Xamarin.Android 拆分视图编辑器的屏幕截图。
(图 18)Xamarin.Android 拆分视图编辑器
  • 改进了自定义控件的 IntelliSense 体验和可靠性。
  • 系统提供值的示例数据支持。

Xamarin.Forms 预览器

使用 Xamarin.Forms 版本 3.1.0.583944 或更高版本时,Xamarin.Forms 预览版现在支持工具箱。 Xamarin.Forms 控件将显示在工具箱中,因此它们更易于发现工具包中的新控件。 还可以将控件拖放到 XAML 代码编辑器上,将控件添加到页面。 Xamarin.Forms 预览版现在是 XAML 编辑器的一部分。 可以使用编辑器窗格边缘的展开图标打开并关闭它。

Python

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

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

迁移本地 Azure 函数设置

“发布摘要”页提供的“托管应用程序设置”对话框现在显示来自 local.settings.json 文件的值,并使你能够将值迁移到 Azure 中托管的远程 Azure 函数应用。

连接的服务

现在,可以直接从 Visual Studio 2017 为具有 Azure Function Projects 的解决方案配置 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 引用的项目的测试适配器扩展。 默认情况下会检查这两个选项,因此此版本中不会更改任何默认行为。
  • 注意:Non-.NET 测试适配器不受此更改的影响。

ASP.NET .NET Framework 机密支持

对于 ASP.NET,面向 .NET Framework 4.7.1 或更高版本的 .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 现在向包含 4.7.2 运行时的所有受支持的平台提供 .NET Framework 4.7.2 开发工具。 .NET Framework 4.7.2 提供了多项新功能和改进,以及许多可靠性、稳定性、安全性和性能修复。

可在以下文章中找到有关 .NET Framework 4.7.2 的更多详细信息:

延迟包加载

现在,Visual Studio 会延迟加载配置为自动加载的异步包,直到 Visual Studio IDE 完全启动且解决方案已加载为止。 此更改不会影响同步自动加载的包。 用户可以查看状态栏左下角的任务状态中心,以监视进度。 创建异步包的扩展作者应测试其扩展。 有关详细信息,请参阅 通过更新扩展的自动加载行为来提高关键方案的响应能力


---

发行说明图标 Visual 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 核心拒绝服务漏洞

ASP.NET Core 2.1 中存在拒绝服务漏洞,该漏洞处理 Web 请求不当。 如果攻击者成功利用此漏洞,可能会导致对 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 核心安全功能绕过漏洞

如果未验证错误登录尝试次数,可能会导致攻击者尝试无限身份验证尝试,则存在 ASP.NET 核心安全功能绕过漏洞。 更新通过验证错误的登录尝试次数来解决漏洞。

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

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

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

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

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

  • 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。

发行说明图标 Visual Studio 2017 版本 15.8.1

发布日期:2018 年 8 月 17 日

15.8.1 版中修复的首要问题

以下是 15.8.1 中解决的问题:

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

发行说明图标 Visual Studio 2017 版本 15.8.2

发布日期:2018 年 8 月 28 日

15.8.2 版中解决的首要问题

以下是 15.8.2 中解决的客户报告的问题:


发行说明图标 Visual Studio 2017 版本 15.8.3

发布日期:2018 年 9 月 6 日

15.8.3 版中已修复的首要问题

以下是 15.8.3 中解决的客户报告的问题:


发行说明图标 Visual Studio 2017 版本 15.8.4

发布日期:2018 年 9 月 11 日

15.8.4 版中修复的首要问题

以下是 15.8.4 中解决的客户报告的问题:

安全公告通知


发行说明图标 Visual 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 简介 ,了解有关可用新功能的更多详细信息。


发行说明图标 Visual 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 添加到工作负荷。


发行说明图标 Visual 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 信息泄露漏洞


发行说明图标 Visual Studio 2017 版本 15.8.8

发布日期:2018 年 10 月 24 日

15.8.8 版中修复的首要问题

以下是 15.8.8 中解决的客户报告的问题:


发行说明图标 Visual Studio 2017 版本 15.8.9

发布日期:2018 年 11 月 2 日

15.8.9 版中修复的首要问题

以下是 15.8.9 版中解决的客户报告的问题:


已知问题

请参阅 Visual Studio 2017 版本 15.8 中的所有现有已知问题和可用解决方法。

Visual Studio 2017 已知问题


Visual Studio 2017 发行说明历史记录

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