此次发布的 Visual Studio 2019 版本 16.8 的新增功能摘要
F#:
- F# 5 现在与 .NET 5 一起发布
- 通过 F# 工具版本 11.0.0 对 Visual Studio 工具进行性能改进和修复
- GitHub 上提供了完整发行说明
C++:
- 现在,/std:c++latest 和 <coroutine> 标头中支持 C++20 协同例程。
- IntelliSense 现提供对 C++20 <concepts> 和 <ranges> 标头的支持,还支持重命名和浏览概念定义。
- STL 现支持大多数 C++20 范围。
- MSVC 中现支持有条件的平凡特殊成员函数。
- /std:c11 和 /std:c17 开关下现支持 C11 和 C17。
- 在 STL 方面的其他改进包括对 std::atomic_ref、std::midpoint and std::lerp 和 std::execution::unseq 的完全支持,以及针对 std::reverse_copy 的优化等等。
- 将 Visual Studio 附带的 CMake 版本升级到了 CMake 3.18。
- 我们的代码分析工具现支持 SARIF 2.1 标准(即行业标准静态分析格式)。
- 如果 Linux 项目中缺少生成工具,现将在工具栏中发出一个警告并在错误列表中明确描述缺少的工具。
- 你现可直接通过 Visual Studio 在远程 Linux 系统或 WSL 上调试 Linux 核心转储。
- 对于 C++ Doxygen 注释生成,我们添加了其他注释样式选项(/*! 和 //!)。
- 其他 vcpkg 公告
- 在未求值的上下文中对 lambda 的编译器支持
- /debug:通过创建多线程 pdb 改善了完整链接性能。 几个大型应用程序和 AAA 游戏的链接速度提高了 2 到 4 倍。
- Visual Studio 调试器现支持 char8_t。
- 支持使用 clang-cl 的 ARM64 项目。
- Intel AMX 内部函数支持。
调试程序:
- 对 .NET Core Linux 核心转储调试的支持
- .NET 和 .NET Core 自动分析
- .NET 和 .NET Core 内存热路径自动分析
- Blazor 灯泡
- C# 灯泡
- 使 Razor 格式化得到增强
- 从 .razor 文件中重命名标记中的 Razor 组件
- Blazor 组件标签命名空间的“转到定义”功能
- C# 悬停着色
- C# 完成工具提示着色
- Razor 的实用定义/实现,包括已关闭的文件
- 在已关闭的 Razor 文件中“查找所有引用”
- 针对大型项目和解决方案,改进了 Razor 编辑性能和稳定性
- 对 SDK 样式的项目使用新的 Fakes 支持时,一些用户在生成填充码时遇到以下问题
- 详细了解如何使用新的联机文档中的所有 Git 功能
- 通过“Git 更改”窗口、“视图”菜单和状态栏,随时打开“Git 存储库”窗口
- 在“Git 更改”窗口中从多个远程库提取、拉取和推送
- 在“Git 存储库”窗口顶部查看 Git 命令的成功消息和错误消息
- 基于 Azure DevOps 工作项创建一个新分支
- 从 Git 菜单中的本地存储库列表打开 Git 存储库
- 现在,默认源代码管理提供程序是 Git,而不是 TFVC
- 单击可在“Git 存储库”窗口中的分支历史记录之间进行切换
- 在 Live Share 会话中以来宾身份使用只读模式访问“新建 Git”窗口
- 打开存储库后,在解决方案资源管理器中查看并选择解决方案列表
- 通过“Git 存储库”窗口中的工具栏修改历史记录视图并搜索提交
- 从分支历史记录图中的传入和传出提交部分提取、拉取和推送
- 在将分支推送到远程位置后获得创建拉取请求的提示
- 在分支列表上下文菜单中查看合并和变基命令中的分支名称
- 通过解决方案资源管理器和编辑器中的上下文菜单访问 Git 命令
- 通过新的模式对话,可查看克隆进度,并可选择将进程移到后台
IntelliCode:
- Roslyn 分析器现包含在 .NET 5.0 SDK 中
- 出现抑制运算符时,引入与语法相匹配的新的 C# 9
not
模式的重构 - 内联方法重构,有助于替换单个语句主体中的静态、实例和扩展方法的用法
- 可将
typeof
的实例转换为nameof
(在 C# 中),将GetType
的实例转换为NameOf
(在 Visual Basic 中)的代码修复 - 对 C# 和 Visual Basic 的内联参数名称提示支持,可在函数调用中的每个参数之前插入对文本、强制转换文本和对象实例化的修饰
- 将所选类中的成员提取到 C# 和 Visual Basic 中的新基类的重构
- 代码清除包含新的配置选项,这些选项可将 EditorConfig 文件中设置的格式设置和文件头首选项应用于单个文件或整个解决方案
- 可在不应通过引用传递参数时删除
in
关键字的代码修复 - 引入新的 C#9 模式组合器和模式匹配建议(例如,转换
==
以使用is
(如果适用))的重构 - 尝试在非抽象类中编写抽象方法时,可以将类变为抽象类的代码修复
- 键入第一个引号时,自动显示 DateTime 和 TimeSpan 字符串文本中的 IntelliSense 完成项
- 用于删除不必要的
pragma suppressions
和不必要的SuppressMessageAttributes
的代码修复 Rename
和Find All References
理解对全局SuppressMessageAttributes
的目标字符串内符号的引用- ByVal 淡化表明并不需要它,并提供代码修复来删除 Visual Basic 中不必要的 ByVal
- 对多个运行时(例如 .NET Framework 和 .NET Core)的交互式窗口支持。
- 添加了新的 RegisterAdditionalFileAction API,分析器作者可通过它创建适用于其他文件的分析器。
- 使用帐户管理体验添加 GitHub 帐户
- 在此版本中,弃用了旧的“在文件中查找”体验,并且所有用户都将移动到新体验。 编辑器团队正积极与遇到“在文件中查找”新式体验问题并在开发人员社区中留下反馈的人员合作解决问题。
- ClickOnce 发布提供程序现可用于 .NET Core 3.1 和 .NET 5.0 Windows 桌面应用程序。
XAML 工具(WPF、UWP 和 Xamarin.Forms):
- XAML 绑定失败诊断改进
- XAML 热重载设置已移至“调试”>“热重载”
- 来自未引用的 NuGet 包的工具箱填充
JavaScript/TypeScript:
- JavaScript/TypeScript 调试器现支持同时调试服务辅助角色、Web 辅助进程、iFrame 和页面 JavaScript! 此外,新的调试体验还支持在浏览器中同时调试后端节点服务器应用程序和客户端 JavaScript。 该功能仍以试验版提供。 可以在“调试选项”菜单中启用新的调试体验
- 现在,可以通过使用代码操作快捷键 (ctrl + .) 在可用的任何位置触发重构。 甚至不需要选择任何文本 - TypeScript 现在足够智能,可以查找光标位置来获得最佳的可用重构!
- 现在,可以微调 TypeScript 搜索哪些包以自动完成导入。 这可以在含有很多依赖项的项目中提高性能。 有关更多详细信息,请参阅 TypeScript 4.0 (发行说明)[https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-0.html ]
- 我们在输出窗格中添加了一条消息,显示我们安装了哪些类型以支持 IntelliSense。 我们建议将 tsconfig 添加到你的项目,以自定义使用的类型。
- 请注意,我们包括 TypeScript 4.0 编译器和语言服务
安全顾问公告
CVE-2020-17100 Visual Studio 篡改漏洞
针对 Visual Studio 的 Python 工具创建 python27 文件夹时存在篡改漏洞。 成功利用此漏洞的攻击者可在提升的上下文中运行进程。
此版本中解决的问题
- 解决了这样一个问题,那就是使用 Intel C++ 编译器的 80 位长双精度型在 Visual Studio 2019 16.7 中编译会引发编译器错误,从而阻止生成项目。
- 解决了 Live Unit Testing 在某些场景中拒绝启动的问题。
- 向 Visual Studio 2019 v16.8 预览版 4 添加了 .NET 5.0.RC2
- 修复了导致会开始临时 Git 操作且该操作永不完成的一个 bug。
- 向 Visual Studio Codespaces 创建和连接添加了附加功能。 注册适用于 Visual Studio 的 GitHub Codespaces,尝试使用它。
- 修复了一个 bug。当关闭或退出 ASP.NET Core 解决方案时,该 bug 导致 Visual Studio 2019 崩溃或停止响应。
Visual Studio 2019 版本 16.8.0 中的新增功能详细信息
C++
- 现在 /std:c++latest 和 标头中支持 C++20 协同例程。 在 <experimental/coroutine> 和 /await 开关中提供对旧行为的支持。
- IntelliSense 现提供对 C++20 和 标头的支持,还支持重命名和浏览概念定义。 存在一项我们预计将在预览版 4 中解决的已知问题。
- STL 现支持大多数 C++20 范围。 你可在我们的 GitHub 上关于范围的问题上跟踪我们的进度。
- MSVC 中现支持有条件的平凡特殊成员函数。
- /std:c11 和 /std:c17 开关下现支持 C11 和 C17。
- 在 STL 方面的其他改进包括对 std::atomic_ref、std::midpoint and std::lerp 和 std::execution::unseq 的完全支持,以及针对 std::reverse_copy 的优化等等。 可在我们的更改日志中找到各项更新。
- 我们将 Visual Studio 附带的 CMake 版本升级到了 CMake 3.18。
- 我们的代码分析工具现支持 SARIF 2.1 标准(即行业标准静态分析格式)。 可在官方规范中详细了解 SARIF 格式。
- 如果 Linux 项目中缺少生成工具,现将在工具栏中发出一个警告并在错误列表中明确描述缺少的工具。
- 你现可直接通过 Visual Studio 在远程 Linux 系统或 WSL 上调试 Linux 核心转储。
- 对于 C++ Doxygen 注释生成,我们添加了其他注释样式选项(/*! 和 //!)。
- 其他 vcpkg 公告
- 添加了对未计算上下文中的 lambda 的编译器支持,让你可以在 decltype 说明符中使用 lambda。
- 现在 Visual Studio 中提供建入时 Linter 和修补程序。 通过“工具”->“选项”->“文本编辑器”->“C/C++”->“代码样式”->“Linter + 修复”。
调试器
对 .NET Core Linux 核心转储调试的支持
到目前为止,很难实现对 Windows 上托管的 Linux 核心转储的调试,它常常意味着再设置一个与生产环境完全镜像的 Linux 环境,然后安装一组用于分析的工具。 庆幸地是,借助 Visual Studio 2019 16.8 预览版 3,你只需将托管 Linux 核心转储直接拖放到 IDE 中就可立即开始调试。
.NET 自动分析
异步编程已在 .NET 平台上推出多年,但之前一直很难做得很好。 我们引入了托管内存转储分析器,它可帮助识别以下方案和反模式:
- Sync-over-Async
- 线程池耗尽
.NET 和 .NET Core 内存热路径自动分析
这使得客户可使用“诊断内存工具”窗口中的 Flame 注释直观查看其内存堆中主要的对象类型。
造成 SDK 样式的项目在生成填充码时出现问题的 Fakes
对 SDK 样式的项目使用新的 Microsoft Fakes 支持时,一些用户在生成填充码时遇到以下问题。
Cannot generate shim for System.DateTime: type is not supported because of internal limitations
16.8 预览版 3 中发布了此问题的修补程序。 如果你使用的是 16.7.* 版本,则可使用以下暂时解决方法:
- 将 <FakesUseV2Generation>False</FakesUseV2Generation> 添加到 csproj 文件中的 PropertyGroup。
- 将 <Fakes Include="Fakes.fakes" /> 添加到 csproj 文件中的 ItemGroup。.fakes" /> to an ItemGroup in your csproj file.
- 在 ProjectDir/FakesAssemblies 中添加对生成的 Fakes 程序集的引用。
还可按照开发者社区反馈获取其他更新。
实验性 Razor 编辑器更新
新的实验性 Razor 编辑器现在支持以下 Razor 编辑功能:
- Blazor 灯泡:
- 提取到代码后置*:
- 根据标记创建组件*
- 为组件添加
@using
指令 - 完全限定组件标记名称
- C# 灯泡
- 添加
@using
指令 - 完全限定类型名称
- 添加
- 使 Razor 格式化得到增强
- 从 .razor 文件中重命名标记中的 Razor 组件
- Blazor 组件标签名称的“转到定义”功能
- C# 悬停着色
- C# 完成工具提示着色
- 在已关闭的 Razor 文件中“查找所有引用”
- 针对大型项目和解决方案,改进了 Razor 编辑性能和稳定性
* 仅适用于本地 Razor 方案,Codespaces 或 Live Share 中尚不支持该功能。
若要启用实验性 Razor 编辑器,请转到“工具” > “选项” > “环境” > “预览功能”,选择“启用实验性 Razor 编辑器”,然后重新启动 Visual Studio。
Visual Studio 2019 IDE
- 使用熟悉的 Visual Studio 帐户管理体验添加 GitHub 帐户。 版本控制、集成终端和其他功能随后将能够使用你的帐户凭据来满足其 GitHub 身份验证需求。
- ClickOnce 发布提供程序现可用于 .NET Core 3.1 和 .NET 5.0 Windows 桌面应用程序。 若要开始使用,请在解决方案资源管理器中右键单击项目,然后选择“发布”,或选择“生成”>“发布 ”菜单。 可以在文件夹类别下找到 ClickOnce。
Git 效率
-
基于 Azure DevOps 工作项创建一个新分支
-
从 Git 菜单中的本地存储库列表打开 Git 存储库
-
默认源代码管理提供程序现在是 Git 而不是 TFVC;你可通过“工具”-“选项”-“源代码管理”进行更改
-
单击可在“Git 存储库”窗口中的分支历史记录之间进行切换
-
在 Live Share 会话中以来宾身份使用只读模式访问“新建 Git”窗口
-
打开存储库后,在解决方案资源管理器中查看并选择存储库中的解决方案列表
.NET 效率
- .NET Compiler Platform (Roslyn) 分析会检查 C# 或 Visual Basic 代码的安全性、性能、设计和其他问题。 从 .NET 5.0 开始,这些分析器包含在 .NET SDK 中。 分析器针对面向 .NET 5.0 或更高版本的项目默认启用。 可通过将 EnableNETAnalyzers 属性设置为 true,在面向 .NET 早期版本的项目上启用代码分析。 可通过将 EnableNETAnalyzers 设置为 false,为项目禁用代码分析 。 还可使“项目属性”窗口启用/禁用 .NET 分析器。 若要访问“项目属性”窗口,请在解决方案资源管理器中右键单击一个项目,然后选择“属性” 。 接下来,请选择“代码分析”选项卡;在这里,你可选择或清除“启用 .NET 分析器”复选框 。
- 现在有一个重构,它引入了在出现抑制运算符时与语法相匹配的新的 C# 9
not
模式。 将光标放在抑制运算符上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“使用模式匹配”。
- 现在有一个内联方法重构,它可帮助你将单个语句中对静态、实例和扩展方法的使用替换为删除原始方法声明的选项。 将光标放在方法使用上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 接下来,选择以下选项之一:
选择“内联 <QualifiedMethodName>
”,删除内联方法声明: