Visual Studio 2017 15.8 版本已正式发布:

安装

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

  • 要使用这一新选项,请在安装程序中选择“全部下载后再安装”选项。 如果 Internet 连接速度较慢,建议使用此选项。

  • 默认选项仍为“下载时安装”,它可并行下载和安装。


性能

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

  • 由于无需再重新加载解决方案,因此可更快地对大型解决方案执行 C#、VB 和 C++ 项目的分支切换。

  • 缩短在大型解决方案中卸载和重载一小组 C# 和 VB 项目的时间 - 从数分钟缩短到数秒钟。

  • 添加了一个选项,用于禁止重新打开已在上一会话中打开的文档,因为重新打开某些类型的文件或设计器会延迟解决方案加载。

    • 通过“工具”>“选项”>“项目”>“解决方案”>“常规”切换此选项。

测试性能

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

Visual Basic 性能改进

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

性能分析

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

  • 添加了“启动但暂停分析”功能:

    • 性能探查器 (ALT-F2) 中的 CPU 使用情况工具现可启动但暂停分析。 如果 CPU 使用情况调查在一段时间后才提供有价值的结果,则此功能非常有用。 通过在禁用 CPU 使用情况收集的情况下启动,性能探查器将不收集任何 CPU 使用情况示例堆栈数据,直到专门启用此类数据。 这样一来,收集和分析的数据量大幅降低,从而使性能调查更加高效。

    • 要在禁用 CPU 使用情况示例收集的情况下启动会话,请在性能探查器启动页中单击 CPU 使用情况工具旁边的设置(齿轮)图标,以显示 CPU 使用情况属性页,然后取消选中标记为“启用 CPU 分析(采样)”的复选框。 最后,按“确定”以保存这些设置。


\*启动目标应用程序后(按性能探查器启动页中的“开始”按钮),将看到一个显示 CPU 使用率图的监视屏幕,你可通过它控制 CPU 分析**。 要启用 CPU 使用情况示例堆栈数据收集功能,请按视图中间的“启用 CPU 分析”链接,或单击 CPU 使用率图下方的“记录 CPU 配置文件”按钮。 可单击“记录 CPU 配置文件”按钮,根据需要多次启用/禁用示例数据收集。 CPU 使用率图的颜色出现相应变化,表示在该时间点是否启用/禁用示例收集。


添加了 .NET 对象分配跟踪工具:

  • 向性能探查器提供的工具系列增添了 .NET 对象分配跟踪工具。 如果为性能探查器会话调用此工具,将为目标应用程序中发生的每个 .NET 对象分配收集堆栈跟踪。 此堆栈数据和对象类型及大小信息一同进行分析,以显示应用程序的内存活动详情。 你可以快速确定代码中的分配模式并识别异常。 此外,对于垃圾回收 (GC) 事件,用户可轻松确定已收集和保留了哪些对象,从而快速确定占用应用程序大部分内存的对象类型。

  • 这对 API 编写器来说尤其有用,有助于最大程度减少分配。 许多应用程序都会超出诊断数据收集中涉及的缓冲区限制,但仍可很好地诊断执行 API 关键方案的小型测试应用程序。 测试应用程序执行过程中,性能探查器会显示一个监视视图,其中包含实时对象(计数)的折线图和对象增量(百分比变化)的条形图。

  • 要使用 .NET 对象分配跟踪工具,请调出性能探查器启动页,选择要分析的目标(默认目标是解决方案中的启动项目),从可用工具列表中勾选“.NET 对象分配跟踪”,然后按“开始”按钮。


性能分析(CPU 使用情况)

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

  • 默认情况下,“调用树”视图现按逻辑调用堆栈显示异步执行。 可通过取消选中 CPU 使用情况主视图的“筛选器”下拉列表中的“拼结异步代码”选项来关闭此行为。

  • 添加了“模块/函数”视图,该视图按模块 (dll) 和模块内的函数显示性能信息。 在 CPU 使用情况主视图中选择函数时,可从上下文菜单中显示“模块/函数”视图,也可以从“调用树”或“调用方/被调用方”视图的“查看”下拉列表中显示“模块/函数”视图。

  • 在 CPU 使用情况工具的主视图中,为 CPU 使用情况图添加了“实例指示”。 双击任意 CPU 使用情况视图中列出的函数,即可在函数执行时(例如在堆栈上)查看实例。

生产力

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

  • 可使用格式文档(Ctrl + K、D 或 Ctrl + E、D)执行其他代码清理进行 C# 开发。 按以下方式配置清理:转到“工具” > “选项” > “文本编辑器” > “C#” > “代码样式” > “格式” > “常规”。

  • 增添了更多使用 Ctrl + . 或 Alt + Enter 的重构和快速操作:

    • dotnet_style_prefer_conditional_expression_over_assignment

    • dotnet_style_prefer_conditional_expression_over_return

    • 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

    • “倒转 If”可让 if-else 语句中的逻辑反转。 将光标置于 if 关键字,以触发此重构。

    • 通过从方法调用站点添加参数,可向方法调用站点添加参数并触发“快速操作和重构”,从而向方法添加参数。

    • 删除不必要的括号时会一并删除对编译不重要的二元运算符两侧的括号。 可通过“工具” > “选项” > “文本编辑器” > “C#” > “代码样式” > “常规”或以下 .editorconfig 配置此样式规则:

    • 此外,还可通过“工具” > “选项” > 或以下 .editorconfig 将“在分配中使用三元条件并返回语句”配置为样式规则:

  • 在“转到所有”窗口中添加了新的命令和改进功能:

    • 通过“转到封闭块”(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 实例,在调试时现在可选择要将扩展部署到的实例。 这样,在预览通道中调试时可以在诸如 Visual Studio 版本等通道中开发。


 \*现在可以直接从发布摘要页附加 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 4.5.x 系列(F# 核心库)保持一致。 可以在 F# RFC 存储库中阅读每个更改的说明。 此版本中还有对用于 Visual Studio 的 F# 工具的诸多改进。

F# 4.5

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

Span<'T> 支持

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

  • 新的 voidptr 类型。

  • FSharp.Core 中新的 NativePtr.ofVoidPtr 和 NativePtr.toVoidPtr 函数。

  • 新的类型 inref<'T> 和 outref<'T>,分别是只读的 byref 和只写的 byref。 此值对应于 C# 中的 in ref 和 out ref

  • 能够生成 ByRefLike 结构(如 Span 和 ReadOnlySpan)。

  • 能够生成 IsReadOnly 结构。

  • 隐式取消引用方法中的 byref 返回值和 inref 返回值。

  • 能够在 byref/inref/outref 上生成扩展成员。

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

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

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

计算表达式中的 Match!

F# 4.5 引入了 match!,一个用在计算表达式中的新关键字(由 John Wostenberg 独立提供)。 此语法糖等同于在结果中 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# 枚举上不完整的模式匹配现在生成详细的警告,给出未涵盖的用例示例(由 John Wostenberg 提供)。

  • `#nowarn "2003" 现在受到尊重(由 Matthias Diitrich 提供)。

  • Steffen Forkmann 修复了在 F# 重载解析中使用 C# 扩展方法可能失败这一 bug。

  • Steffen Forkmann 修复了内部 QueueList 数据结构 bug。

  • Steffen ForkmannEugene Auduchinok 和 ncave 还提供了各种小的优化并进行了代码清除工作。

F# 核心库 4.5.x

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

  • 完成了大量工作来改进 async { } 计算表达式的堆栈跟踪。 现在应能够在堆栈跟踪中查看用户代码和用户行号。 可在此功能的 RFC 中了解详细信息。

  • 提供类型 System.Func 和 System.Action 重载的 FuncConvert.FromFunc 和 FuncConvert.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 Forkmann 和 Gauthier 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#”>“代码透镜”中将其打开。

  • Sebastian Urban 修复了 F# 编译器服务会错误地省略 XML 文档中模块名称的拼写这一 bug。

  • 使用 Dictionary 与 ContainsKey 和后续 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/contro.fsi 文件现拆分为 async.fs/async.fsievent.fs/event.fsieventmodule.fs/eventmodule.fsimailbox.fs/mailbox.fsi 和 observable.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 添加配置


C++ 生产力

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

  • 有关宏的 C++ 快速信息工具提示现在显示它们的扩展功能,而不仅仅是其定义。 如果复杂宏在其阐明预处理器使用什么代替宏标识符时引用了其他宏,这将特别有用。

  • 添加了新的快速修复灯泡,将基本宏转换为 constexpr 作为使代码变得新式的新工具。

  • 用于模板的 IntelliSense 提供了有关模板参数的详细信息,便于在模板正文中充分利用 IntelliSense。


  • 我们正在努力使代码分析体验焕然一新。 你现在可以启用“工具” > “选项” > “文本编辑器” > “C++” > “试验” > “代码分析”下新的进行中功能。 打开或保存文件时,代码分析可在后台中运行,并且结果显示在错误列表中,在编辑器中显示为绿色波形曲线。


C++ 调试改进

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

  • 仅我的代码功能现在允许逐步执行系统或第三方 C++ 库中的代码,以及折叠调用堆栈窗口中的那些调用。 当代码使用 /JMC 进行编译且 .natjmc 文件中指定了非用户库路径时,可以为任何 C++ 库控制此行为。 如果你在进入时系统库调入用户代码,则调试器跳过所有系统代码并在用户代码回调的第一行上停止。


  • 数据断点现在可在“监视”、“快速监视”、“自动”和“局部变量”窗口中进行设置,从而只需几次短的单击即可在存储于内存中的值发生更改时切断。

  • 源链接允许在编译过程将可执行的或库的原始源代码相关信息嵌入 PDB。

  • 调试时,如果程序终止执行,控制台窗口现将默认保持打开状态(类似于在没有调试器的情况下运行程序)。 可以在“工具” > “选项” > “调试” > “常规”中将此行为切换回自动关闭控制台。

Visual Studio Web 工具

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

容器工具

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

创建项目时,可以添加 Docker 支持。


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


Visual Studio 还添加用于 Docker 的调试器启动配置文件,以便项目在容器内运行时可对其进行调试。


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

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

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


发布改进

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

  • 将 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 Emulator。 这样,你可以将 Google Android Emulator 与其他基于 Hyper-V 的技术(例如 Hyper-V 虚拟机、Docker 工具和 HoloLens 模拟器等)并行使用。 现向使用 Hyper-V 的移动应用开发人员提供一款快速运行的 Android 模拟器,该模拟器始终支持最新的 Android API、可与现有的 Google Play Services 配合使用,同时支持 Android Emulator 的各项功能(例如照相机、地理位置和快速启动)。


Xamarin.Android 设计器

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

  • 引入了拆分视图编辑器,它可用于同时创建、编辑和预览布局。


  • 改善了 Intellisense 体验,同时提升了自定义控件的可靠性。

  • 支持对系统提供的值使用示例数据。

Xamarin.Forms 预览器

当使用 Xamarin.Forms 3.1.0.583944 版或更高版本时,Xamarin.Forms 预览器现提供工具箱支持。 Xamarin.Forms 控件将在工具箱中显示,这让工具箱新手们能更轻松地找到它们。 还可将控件拖放到 XAML 代码编辑器中,从而在页面上添加控件。

Python

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

  • Python IntelliSense 现使用 typeshed 定义为无法通过静态分析推断出自动完成的库提供更丰富的结果。

  • 试验性调试器在 15.7 预览版中首次推出,它现在是 Python 使用的默认调试引擎,为 Python 代码提供更快、更可靠的调试。

  • 增添了对 Python 3.7 的支持且附带修补程序,可实现调用附加功能、分析功能和混合模式(跨语言)调用功能。

  • 要详细了解上述功能,请务必查看 Visual Studio 15.8 中的 Python 博客文章。

迁移本地 Azure 函数设置

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

连接的服务

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

测试资源管理器方面的改进

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

新的扩展性功能

语言服务器协议

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

AsyncPackage 模板

扩展作者现可通过项模板创建 AsyncPackage,从而优化其扩展的性能。 要详细了解如何使用 AsyncPackage,请参阅本文档

扩展包

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

命令行扩展发布

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

.NET Core SDK 2.1.400

Visual Studio 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 中。

.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(通过更新扩展的自动加载行为来提高关键方案的响应能力)。