Visual Studio 2019 版本 16.10 发行说明
提示
观看 Visual Studio 2022 启动事件的录制内容,了解新增功能、收听技巧 & 技巧,以及下载免费的数字顺手牵羊。
开发者社区 | 系统要求 | 兼容性 | 可分发代码 | 许可条款 | 博客 | 最新版本已知问题 | Visual Studio 新增功能文档
单击按钮即可下载最新版 Visual Studio 2019。 有关如何安装和更新 Visual Studio 2019 的说明,请参阅将 Visual Studio 2019 更新到最新版本。 另请参阅如何脱机安装的说明。
Visual Studio 2019 版本 16.10 的新增内容
Visual Studio 2019 版本 16.10 发行版
- 2021 年 7 月 20 日 — Visual Studio 2019 版本 16.10.4
- 2021 年 6 月 29 日 — Visual Studio 2019 版本 16.10.3
- 2021 年 6 月 15 日 — Visual Studio 2019 版本 16.10.2
- 2021 年 6 月 08 日 — Visual Studio 2019 版本 16.10.1
- 2021 年 5 月 25 日 — Visual Studio 2019 版本 16.10.0
Visual Studio 2019 已存档的发布说明
- Visual Studio 2019 v16.9 发行说明
- Visual Studio 2019 版本 16.8 发行说明
- Visual Studio 2019 版本 16.7 发行说明
- Visual Studio 2019 版本 16.6 发行说明
- Visual Studio 2019 版本 16.5 发行说明
- Visual Studio 2019 版本 16.4 发行说明
- Visual Studio 2019 版本 16.3 发行说明
- Visual Studio 2019 版本 16.2 发行说明
- Visual Studio 2019 版本 16.1 发行说明
- Visual Studio 2019 版本 16.0 发行说明
Visual Studio 2019 博客
可从 Visual Studio 2019 博客获取来自 Visual Studio 工程团队的官方产品见解。 有关 Visual Studio 2019 版的详细信息,可参阅以下文章:
- Visual Studio 2019 v16.10 和 v16.11 预览版 1 现已推出!
- 在 Visual Studio 中使用 Git 提高了工作效率
- 今日推出!Visual Studio 2019 v16.9 和 v16.10 Preview 1
- Visual Studio 2019 v16.9 预览版 3 即刻推出!
- 即将为你带来 Visual Studio 2019 v16.9 预览版 2 和新年祝福!
- Visual Studio 2019 v16.8 和 v16.9 Preview 现已推出
- Visual Studio 2019 v16.8 预览版 3.1 中的新增功能
- Visual Studio 2019 v16.8 预览版 2 今天发布新功能!
- Visual Studio 2019 v16.7 和 v16.8 预览版 1 今天发布!
- Visual Studio 2019 v16.7 预览版 2 即刻推出!
- Visual Studio 中针对 Git 体验的精彩新更新
- 立即发布!Visual Studio 2019 v16.6 和 v16.7 预览版 1
- Visual Studio 2019 版本 16.6 预览版 2 推出适合你的新功能
- Visual Studio 2019 版本 16.5 现已正式发布!
- Visual Studio 2019 v16.4 发行版,圣诞季
- Visual Studio 2019 v16.4 预览版 2,秋日运动与南瓜风味
- Visual Studio 2019 版本 16.3 中的 .NET Core 支持及更多功能 - 立即更新!
- Visual Studio 2019 版本 16.3 预览版 2 和 Visual Studio 2019 for Mac 版本 8.3 预览版 2 现已发布!
- Visual Studio 2019 版本 16.2 和 16.3 预览版 1 现已推出
- Visual Studio 2019 版本 16.2 预览版 2
- Visual Studio 2019 版本 16.1 和预览版 16.2 预览
- Visual Studio 2019:更快地编写代码。更智能的工作。开创未来。
Visual Studio 2019 版本 16.10.5
此发行版 Visual Studio 2019 版本 16.10.5 的新增内容摘要
此版本的 Visual Studio 2019 仅通过 Windows 软件更新服务 (WSUS) 提供。
此版本中已修复的主要问题
- iOS 远程模拟器现在可正常使用安装了 Xcode 12.4 或 12.5 的配对 Mac 设备。 与安装了 Xcode 12.4 或更高版本的 Mac 设备配对时,以下 Xcode 模拟器功能不可用:
- 模拟内存警告
- 模拟位置
安全顾问公告
CVE-2021-26423 .NET Core 拒绝服务漏洞
存在拒绝服务漏洞,在这种情况下,提供 WebSocket 终结点的 .NET (Core) 服务器应用程序在尝试读取单个 WebSocket 帧时可能会陷入无限循环。
CVE-2021-34485 .NET Core 信息泄漏漏洞
使用 Linux 和 macOS 上的全局读取权限创建由工具创建的用于收集故障转储和按需转储的转储时,存在信息泄漏漏洞。
CVE-2021-34532 .NET Core 信息泄漏漏洞
如果无法分析 JWT 令牌,则记录该令牌时存在信息泄漏漏洞。
Visual Studio 2019 版本 16.10.4
此发行版 Visual Studio 2019 版本 16.10.4 的新增内容摘要
此版本中已修复的主要问题
- 删除 memset 中不允许使用的寄存器。
- 修复了涉及包含按位非运算符的复杂嵌套表达式的 Codegen bug。
- 修复了 VS 图形分析器的着色器调试
- 修复了在类中模板专用化过程中处理静态数据成员时发生的 IntelliSense 故障。
- 与 /installer /passive 开关一起运行时,X64 VC 可再发行程序包不再删除运行时文件。
- 更正了在预配“包含目录”时包含搜索顺序可能不正确的问题。
- 我们已修复了一个检查器扩展所导致的性能问题和误报,此问题会发现滥用 VARIANT 的 bug。
- 我们已修复了一个检查器扩展所导致的性能问题,此问题会发现滥用枚举值作为索引的 bug。
- 引入 Live Share 语言服务修补程序,恢复了协作会话参与者的主要代码编辑功能(代码完成、语法高亮、错误等)。
- 并发分析器不应再生成自动锁模式的错误警告 C26110(获取锁失败)。
- C# 和 Visual Basic 编译器修复了涉及 InternalsVisibleTo 与其他程序集级属性冲突的故障。
- 我们修复了客户在使用 Windows 应用程序打包项目(如 WPF NetCore 应用和 Project Reunion 应用)来打包项目时遇到的一个问题:
找不到错误资产文件“...\obj\wappublish\win10-x86\project.assets.json”。 运行 NuGet 包还原以生成此文件。 App4 (Package) C:\Program Files\dotnet\sdk\5.0.302\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets 242
这个问题是由于打包项目在错误的目录 (win10-$(configuration)) 中查找 project.assets.json 文件导致的,它应该在 win-$(configuration) 中查找。
来自开发者社区
- 外部标头编译错误
- 分析器 C26110 的不正确锁定警告
- 当在 InternalsVisibleTo 属性中声明程序集时,在升级到 v16.10 Visual Studio 后发生内部编译器错误
- Visual Studio 16.10.2 随附的 Vcredist_x64.exe (14.29.30038.0) 在使用 /passive 开关第二次安装后,不正确地删除了 msvcp140.dll
- VS 16.10.1 代码生成问题(仅限 x86)
- 地址擦除系统应允许在不使用环境变量的情况下触发故障转储
- 当单击顶点着色器后的三角形开始着色器调试时,图形分析器停止工作
- Vsftest:测试 NMI
- Project Reunion 发布问题
- LKG12 WAVE2 中的工具在交付之前需要更新
- 无法将 WinUI 3 应用打包到 MSIX 中
- 图形调试器 - 在更新到 16.10.3 后 Shader-Debugging 中断?
- 无法使用 Project Reunion 0.8 打包 WinUI 3 应用
Visual Studio 2019 版本 16.10.3
发布日期:2021 年 6 月 29 日
此版本 Visual Studio 2019 版本 16.10.3 的新增功能摘要
此版本中已修复的主要问题
- 修复了从模块导入的符号上的“转到定义”有时转到模块文件的开头而不是符号的定义的问题。
- 修复了由于文本框边框颜色的光度比小于 3:1,导致视力受损的开发人员难以识别屏幕上的焦点的问题。
- 修复了数据库项目:将文件从解决方案资源管理器拖动到打开的文件时,将从文件系统中删除该文件。
- 修复了在数据库项目中使用 merge 语句将导致生成错误的问题。
- 在报告安装哪些扩展时,不再在磁盘上发送路径。
- 修复了试图关闭“快速入门”窗口可能导致 Visual Studio 崩溃的问题。
- 修复了显示工具窗口有时会造成 VS 崩溃的问题。
- 修复了在应用程序中加载不相关的 G++/GCC 生成的符号时用户代码中的 C++“编辑并继续”。
- 修复了 iAd 框架中的专用选择器用法。
- 修复了 VS 中因 XAML 设计器中发生的错误而造成的故障
- 修复了引用 .netcoreapp 项目的 Windows 应用程序打包项目生成 .msixbundle 的问题。
- 修复了无法对 WAP 项目执行快速最新检查的问题,该问题会导致生成(而不是跳过)这些项目(即使项目是最新的且不需要修改),这进一步导致 IDE 中的增量生成时间增加。
来自开发者社区
[C++, IntelliSense, 16.7.7]
工具提示中成员函数指针的大小错误- 处理 SQL Server 项目时 16.9.2 冻结
- C++20 IntelliSense 在 range-v3 版本 0.10.0 中出现错误
- 模块的 IntelliSense 问题
- Xamarin Forms iOS SkiaSharp DirectoryNotFoundException
- 版本 16.10.0 发布编辑器问题 - 无法再使用元素组合框导航代码
- C++ 20 模块:单击“转到声明”时,光标跳转位置不正确
- v16.10 中缺少“添加帐户时启用设备代码流”选项
- VS 2019 16.10.0 PackageInspectionFailed:无法从捆绑包加载 Info.plist,无此类文件或目录
- 应用商店包包含 32 位文件
- 16.10.2 不连接到 Mac
- vsftest:测试 NMI
Visual Studio 2019 版本 16.10.2
发布日期:2021 年 6 月 15 日
此版本 Visual Studio 2019 版本 16.10.2 的新增功能摘要
此版本中已修复的主要问题
- 代码分析中的并发检查更智能。 它们很难被复杂的控制流所欺骗。
- 此修补程序通过跳过对外部标头的分析并抑制来自外部标头的警告来恢复外部标头的行为。
- 修复了 .aspx/ascx 文件,用户可能在其中看到不完整的 IntelliSense 或体验到较低性能。
- 修复了 Unity CodeLens 提供程序在处理大型项目时的可伸缩性问题。
- 恢复了 Azure 服务身份验证选项页中已翻译的字符串。
- 修复了使用 Resharper 扩展时间歇性的 Visual Code 显示问题。
- 修复了某些工具窗口、编辑器和设计器被渲染得太小而无法显示任何内容的问题。
- 修复了运行应用或尝试将其发布到 App Store 时 Xamarin iOS 缺少应用图标的问题。
- 使用 AOT+LLVM 生成项目不再因 XA3001 错误而失败。
- 升级到 Visual Studio 2019 版本 16.10 后,在某些情况下,UWP 应用的发布可能会失败,并显示错误消息“在图像文件中找不到指定的资源名称”。 此问题现在已修复。
- 修复了导致 Visual Studio 2019 在设备配置更改时停止响应的问题。
- 修复了 MSBuild 中的三个问题:
- 避免在 Azure DevOps 中生成时出现 MSB4017 错误。
- $(
[MSBuild]
::MakeRelative()) 再次在其输入中保留尾随斜线。 - 具有尾随 ** 模式的排除 glob 再次排除没有 . 字符的文件 字符
来自开发者社区
- 开发者社区有此版本中发布的所有项的完整列表。
- ClickOnce 不会发布项目。
- 当 SelfContained=true 且项目引用另一个项目时,.NET 5.0 的 ClickOnce 发布失败。
- ClickOnce 不再有效。
- ClickOnce 发布:找不到元数据文件(使用了错误目录),发布适用于 CLI
- 发布时 ClickOnce 尝试从错误文件夹中收集库!(.Net 5)
- Visual Studio 2019 版 16.10.0 内部版本更新后,ClickOnce 未正常工作。
- 使用 EWDK 在 16.10.0 中生成回归
- 发布时遇到错误。
Visual Studio 2019 版本 16.10.1
发布日期:2021 年 6 月 08 日
此版本 Visual Studio 2019 版本 16.10.1 的新增内容摘要
此版本中已修复的主要问题
- 修复了导致 IntelliSense 编译器崩溃的问题。
- 修复了在解决方案中打开测试资源管理器时,导致 Visual Studio 2019 实例无法关闭的问题。
- 修复了开发人员从命令行生成部分解决方案时出现的故障。
- 修复了 .NET Core 应用程序的 ClickOnce 发布中的故障。
- 修复了调用堆栈窗口可能导致 Visual Studio 2019 崩溃的问题。
- 修复了生成 iOS 绑定项目时的生成错误“找不到元数据文件 '***\bin\Debug\NativeLibrary.dll'”。
安全顾问公告
CVE-2021-31957 ASP.NET 拒绝服务漏洞
ASP.NET Core 未正确处理客户端断开连接问题时,存在拒绝服务漏洞。
来自开发者社区
Visual Studio 2019 版本 16.10.0
发布日期:2021 年 5 月 25 日
此版本 Visual Studio 2019 版本 16.10.0 的新增内容
C++
- 所有 C++20 功能现已在
/std:c++latest
开关下提供。 尽管 MSVC 对 C++20 标准(目前由 ISO 发布)的实现已经完成,但是一些关键的 C++20 库功能预计会由即将发布的缺陷报告(ISO C++20 bug 修复)进行修改,这些缺陷报告可能会以一种 ABI 不兼容的方式对它们进行更改。 有关详细信息,请参阅 Microsoft/STL 问题 #1814。- 16.10 中已添加 C++20 即时函数和 constinit 支持
- 新时钟、闰秒、时区和解析
<chrono>
的最后几部分 - 文本格式化
<format>
的实现
- 除了 x64 之外,
/openmp:llvm
现已在 x86 和 ARM64 上推出 - 现可使用自定义编译警告等级和代码分析设置将包含目录指定为外部目录。
- 添加了
/await:strict
开关以在以前的语言模式下启用 C++20 样式协同例程。 std::coroutine_handle<T>
的调试程序可视化效果现在可显示原始协同例程函数名、签名和当前挂起点。- 新增了对 CMakePresets 的支持。
- 现在,在 Visual Studio 中添加新的远程连接时,需要接受或拒绝由服务器提供的主机密钥指纹。
- 向 MSVC 添加了一个
/external
开关,用于指定出于警告目的哪个标头应被视为外部标头。
- 能够创建一个启动配置文件,用于配置将在 Compose 文件中启动的服务。
- 能够标记映像。
- 添加了适用于容器的“卷”选项卡。
- 添加了适用于容器的“标签”选项卡。
- 添加了适用于映像的“标签”选项卡。
- 容器现在按 Compose 项目分组。
编辑器
- 如果用户想要不那么拥挤的体验,可以通过在 Visual Studio 搜索 (Ctrl+Q) 中搜索“行距”来修改行行距。 该选项位于“文本编辑器”\“常规”下。
- “在文件中查找”和“查找所有引用”具有可以保存结果的控件。 根据社区的反馈,我们添加了一个选项,用于在默认情况下开启“保存结果”选项。 通过在 Visual Studio 搜索 (Ctrl + Q) 中搜索“默认保存搜索结果”可以找到此选项。 该选项位于“环境”\“查找和替换”下。 请注意,用户当前使用“在文件中查找”只能获得 5 个结果,而使用“查找所有引用”则可以多获得 5 个结果。
- “在文件中查找”有一个新选项可以让用户运行其他搜索,并将这些结果追加到以前的搜索中。
编辑器扩展性
- 管理 IntraTextAdornmentTags 的代码的行为已发生更改。 对待此更改应像对待任何其他 ITagger 一样,当基础标记发生变化时,你也必须引发标记已更改事件。 否则,相应标记可能永远不会更新。
- 内存转储的诊断分析现在包括托管 Linux 核心转储。
- 通过深层链接跳转到 Web 以创建新的拉取请求,并查看 GitHub 上的拉取请求或 Git 菜单中的 Azure DevOps。
- 只需从分支选取器中选择一个分支,即可签出本地和远程分支。
- 通过上下文菜单从存储库选取器中删除项。
- 通过“Git”>“设置”开启相应功能,以便在打开 Git 存储库时自动加载解决方案。
- 通过“Git”>“设置”切换双击签出“Git 存储库”窗口中分支的行为。
- 将你的分支与“Git 更改”窗口溢出菜单中的多个远程分支进行同步(先“拉取”后“推送”)。
- 自定义“Git 更改”窗口溢出菜单中可见的工具栏操作(提取、拉取、推送、同步)。
- 在浏览器中从“Git 更改”窗口的溢出菜单打开存储库。
- 在状态栏中搜索和签出本地分支和远程库分支。
- 在状态栏中搜索并切换本地 Git 存储库。
- 修复了在 Visual Studio 启动时 Git 菜单中的本地存储库列表不加载的问题。
- 打开存储库时,将嵌套项目子存储库添加到本地存储库列表。
- 在通过“Git”>“设置”切换存储库时,将解决方案保持打开状态。
- 在通过“Git”>“设置”打开存储库时,关闭打开的文件夹。
- 通过状态栏中的“未推送的提交”按钮和 Git 菜单中的“同步”命令中将分支与远程库同步。
- 即使没有传入的提交,也可以从“Git 存储库”窗口的“历史记录”窗格中提取和拉取。
- 查看“Git 存储库”窗口中嵌入的提交详细信息和文件更改比较。
- 打开 Azure DevOps Git 存储库时,自动重新连接或提示建立初始 Azure DevOps 连接。
- 对可见的分支名称进行合并和变基,替换混乱的源/目标术语。
- 改进了解决方案资源管理器中的源代码管理字形的性能和可靠性。
- 保留“Git 存储库”窗口中的传入/传出部分,即使是空的。
- 将“Git 更改”窗口中多个远程库的“提取”/“拉取”/“推送”下拉列表合并为一个“操作”菜单。
- 方法调用中的参数补全
- EditorConfig UI
- 目视检查并浏览继承链
- 对强制转换、索引器和运算符的 IntelliSense 补全
- 对源生成器的调试器支持
- 对 Visual Basic 的代码清理支持
- 编辑并继续 (EnC) 更新
- 删除未用引用
- 智能换行
- 简化 LINQ 表达式的重构
- 对 Enum 值进行 IntelliSense 补全
- IntelliSense 补全模式设置
- 新行的代码样式首选项
- 对源生成器的“查找所有引用”支持
- IntelliSense 补全的更新
- 对通用组件的“转到定义”支持
- 制表符和空格的新代码样式配置
- “工具选项”中的 Razor 文本编辑器现在称为 Razor (ASP.NET Core)
- Console.Writeline 现在显示在测试资源管理器中
- 测试输出现在可以保留标记,因此即使从日志文件中也可以浏览超链接和堆栈跟踪链接。
- 如果输出超过 300 个字符,或者附加到测试结果的文件超过 10 个,则会为单个测试结果创建日志文件。
- 日志文件现在也可以在预览中打开,这样可以更轻松地管理选项卡。
- 日志文件和测试资源管理器支持按 Ctrl PgUp/PgDn 导航光标,并按 Shift + Ctrl PgUp/PgDn 进行选择。
- 日志文件编辑器现在正在使用 IVsTextView 接口,这意味着它现在能够打开非常大的文本文件。 这样,用户就无需
Copy All
截断日志并在记事本等单独的编辑器中打开它们。 对于 MSTest,我们现在还加入了一个聚合了所有输出的单个日志文件,而不是对每个数据行使用单独的日志文件。 - 现在,你可以在 Ubuntu 和 Alpine 上的命令行使用 dotnet cli 获得跨平台代码覆盖率。 对于希望在针对这些平台的计算机上获得代码覆盖率的用户,你现在可以添加通常在 Windows 上使用的相同代码覆盖率收集命令。 查看更多关于 dotnet test 的文档。
- 现在,测试资源管理器中的“全部折叠”按钮旁边有一个“全部展开”按钮。 此命令已可以通过键盘快捷键(Ctrl+A,Ctrl+ 向右键)使用,但是更多的反馈表明添加一个按钮值得额外的 UI。 依旧感谢你让我们通过 https://developercommunity.visualstudio.com/ 了解了你的想法。
- 测试资源管理器显示“过期”的方式也有一些细微的更改。 “过期”指灰显或“褪色”测试结果,指示结果不是来自最新的测试运行。 如果结果不是最近的测试运行的一部分,它将显示为过时。 以前,新的测试发现(甚至是重新发现的旧测试结果)也用纯色图标显示。 这引起了一些困惑 - 为何一些“未运行”测试显示为褪色,而其他的则没有。 此更改将降低过期的复杂性。
- 通过持久化测试结果功能(在版本 16.2 中添加),即使关闭并重新打开 Visual Studio,也可以看到上次测试运行的测试结果。 这可以帮助用户记住其中断位置,并提供更多上下文,而无需再次测试运行。 我们还修改了持久化结果的行为,这样它们将始终显示为过时。 这更好地表明它们不是来自在当前 Visual Studio 会话期间执行的测试运行。
- 切换到 API V2 进行 Azure AD 预配
- 作为连接服务的 Azure 应用程序配置现在支持动态配置
- 向 WAP 项目添加了“依赖项树”
- 为 Xamarin.Forms 用户改进了 XAML IntelliSense 和 XAML 热重载
- 在 WPF 中为精选 ItemsControls 引入了 XAML 示例数据
- 添加了新的灯泡以快速访问常编辑的属性
- 在 XAML 编辑器中添加了新的灯泡,以帮助创建视图模型
- Service Fabric 应用程序中引入 StartupServices.xml
Visual Studio 2019 版本 16.10 的新增功能的详细信息
Docker 工具
容器工具窗口
在此版本中,我们升级了容器工具窗口,使其更容易查看和与容器和映像交互。 只需导航到“视图”>“其他 Windows”>“容器”,即可试用新功能。
- 容器现在按 Compose 项目分组。 这样可以很容易地判断哪些容器代表你的应用程序。 此外,我们在容器中添加了“标签”选项卡,以便你可以轻松地查看在开发期间使用的标签。
- 我们还添加了适用于映像的“标签”选项卡。
- 使用新的“卷”选项卡可以查看正在运行的容器的卷,甚至可以在 Visual Studio 中打开这些文件。
- 现在,我们支持在“容器”工具窗口中标记映像功能。 在“映像”中,右键单击映像并选择“标记” 。
撰写
- 通过 Visual Studio 中的 Docker Compose 工具,现在可以运行 Compose 文件中定义的任何服务组合。 打开“调试”下拉菜单,或者右键单击 docker-compose 项目,选择“管理 Docker Compose 启动设置”即可开始。
Git 效率
- 为了更轻松地在 Visual Studio 中创建拉取请求,我们向网页添加了深层链接快捷方式的菜单项,你可使用这些菜单项创建 PR 或查看存储库的 PR 列表。 菜单位置不固定,具体取决于存储库是位于 GitHub 还是 Azure DevOps。
- 在选择单一分支时,状态栏和“Git 更改”窗口中的分支选取器现在会签出本地或远程分支。 你可在上下文菜单中找到其他操作。
- 状态栏中的新存储库选取器在右键单击后会显示上下文菜单,你可使用此菜单从列表中删除项。
使用存储库选取器或 Git 菜单“本地存储库”列表时,打开存储库后,系统不再自动加载解决方案。 相反,你将在可供选择的列表中看到文件夹视图和可获取的解决方案。 通过“Git”>“设置”,你可借由切换复选框更改此行为。
通过双击分支名称,你可选择从“Git 存储库”窗口签出分支。 如要更改此行为,请通过“Git”>“设置”切换复选框。
- 你现可从“Git 更改”窗口执行更多操作。 工具栏图标可以自定义,让你自行选择要显示的操作。 你可以与溢出菜单中的多个远程分支保持同步。 你可以在浏览器中打开存储库的远程网页。
- 在状态栏分支选取器中搜索本地和远程库分支并执行常见分支操作。
- 在状态栏存储库选取器中搜索并切换本地 Git 存储库。
- 修复了 Git 菜单中的本地存储库列表在 Visual Studio 启动时不加载的问题。
- 我们在“Git”>“设置”中添加了两个新选项,用于管理打开和切换存储库的方式。 现在,可以在切换到其他存储库时将当前解决方案保持为打开状态
- 还可以选择在打开存储库时不加载存储库根文件夹。
- 通过状态栏中的“未推送的提交”按钮和 Git 菜单中的“同步”命令中将分支与远程库同步(拉取后推送)。
- 即使没有传入的提交,也可以从“Git 存储库”窗口的“历史记录”窗格中提取和拉取。 在状态栏或使用键盘快捷方式 Ctrl+0+Y 访问这些部分。
- 在“Git 存储库”窗口中选择“提交”可以查看其详细信息和文件更改的比较,而无需导航到其他窗口。 选择两个提交并单击右键,在同一窗口中进行比较。 在他们自己的窗口中弹出详细信息,通过全屏模式深入了解这些更改。
- 查看文件中的删除和插入操作数,更改比较的布局。
- 打开 Azure DevOps Git 存储库时,自动重新连接或提示建立初始 Azure DevOps 连接。 这样,便可以访问打开的存储库的工作项和生成。
">
- 解决变基或合并冲突时,合并编辑器和上下文菜单将显示当前和传入分支的分支名称。 这修复了混乱的源和目标术语。
.NET 效率
- 添加了“删除未用引用”命令,便于清理未用的项目引用和 NuGet 包。 此选项默认处于禁用状态,因此你需要在“工具” > “选项” > “文本编辑器” > “C#” > “高级”中启用它,然后选中“在解决方案资源管理器(实验性)中显示‘删除未用引用’命令”。 在启用此选项后,“删除未用引用”命令就会显示在解决方案资源管理器中项目名称或依赖项节点的右键单击菜单中:
选择“删除未用引用”会打开一个对话框,你可以在其中查看要删除的所有引用,并能选择保留要保留的引用:
- 新增了名为“智能换行”的命令,当你使用“Shift+Enter” 作为提交字符时,它会自动插入一组大括号,并在这些大括号内放置插入点。 智能换行适用于所有需要大括号以及属性、事件、字段和对象创建表达式的类型声明。 下面的示例展示了对类和字段使用的智能换行。 如果字段的末尾没有分号,那么键入“Shift+Enter” 会通过添加一组大括号将字段转换为属性。 你可以再次按“Shift+Enter”来撤消提交,这还会自动在字段的末尾添加分号 :
- 现在有可以 简化 LINQ 表达式的重构,这将删除对 .Where() 方法的 Enumerable 的不必要调用,从而帮助改进性能和可读性。 将光标置于 LINQ 表达式上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“简化 LINQ 表达式”。
- 现在,当类型已知时,即使没有输入 Enum 名称,也会对 Enum 值进行 IntelliSense 补全。
- 新增了 IntelliSense 补全模式设置,让你能够设置默认补全选项。 通过依次转到“工具” > “选项” > “文本编辑器” > “高级” > “默认 IntelliSense 补全模式”,可以找到此新设置,在其中能够选择以下选项:“上次使用”- 保留你上次按下“Ctrl+Alt+空格”使用的设置;“仅选项卡” - 仅在选项卡上补全;以及,“自动” - 这是将补全标点和特殊字符的当前默认行为。
- 新增了新行的代码样式首选项。 可以使用 EditorConfig 文件或在“工具” > “选项” > “文本编辑器” > “C#” > “代码样式” > “新行首选项(实验性)”来配置这些首选项。
例如,可以将代码样式首选项设置为,报告诊断并提供代码修复来删除多余的空白行:
现在有对源生成器的“查找所有引用”支持,让你能够在源生成的文档中查找引用。
现在添加了一个补全选项,它可以在编写方法调用时自动插入参数。 此功能默认关闭,因此需要在“工具”>“选项”>“文本编辑器”>“C#”>“IntelliSense”中启用该功能,并选择 Tab 键两次来插入参数(实验性)。 开始编写方法调用,并按 Tab 键两次 (Tab+Tab)。 请注意,该方法调用包含基于该方法的默认值的参数。 然后,你可以使用参数信息按向上键和向下键循环浏览你想插入的参数列表。 你也可以开始键入一个参数来调出 IntelliSense 补全列表,然后键入分号以提交该参数,并在方法调用的末尾添加一个分号。
- 我们为 EditorConfig 创建了一个 UI。 从解决方案中打开任何 C# 或 Visual Basic EditorConfig 文件。 请注意,新 UI 将针对 C# 和 Visual Basic 打开显示代码样式和代码质量配置选项。
- 现在添加了用于浏览和检查继承链的可视化表示形式。 此选项默认关闭,因此需要在“工具”>“选项”>“文本编辑器”>“C#”>“高级”中打开它,并选择“显示继承边距”。 启用继承边距将向边距添加新图标,表示代码的实现和替代。 单击“继承边距”图标将显示可以选择导航到的继承选项。
- 现在添加了对强制转换、索引器和运算符的 IntelliSense 补全。
- 现在添加了对源生成器的调试器支持。 首先需要通过 Visual Studio 安装程序安装 .NET COMPILER PLATFORM SDK 组件。 然后,需要将
<IsRoslynComponent>
true</IsRoslynComponent>
属性添加到项目文件。 接下来,在“项目属性调试”页中启用“Roslyn 组件”调试器选项,然后选择相应的目标项目。 接下来,在生成器项目上按 F5,这将启动生成目标项目的 CSC.exe/VBC.exe,使你能够调试生成器代码。
在此版本中,我们还在 Visual Studio 的编辑并继续 (EnC) 调试体验中添加了以下增强功能:
- 现在可以将更改应用到分部类中的代码中。
- 现在可以在生成的源文件内应用更改。
- 现在可以添加和/或更改 using 指令。
- 提高了可靠性并降低了内存消耗。
目前只要支持 EnC,所有这三项更改均可用,并且这三项更改适用于 C# 和 Visual Basic 源文件。
调试程序和诊断
- 我们已经开发了多个分析器来帮助捕获托管内存转储中的常见问题。 现在可以对托管 Linux 核心转储执行此分析。
谢谢!
最后但同样重要的是,非常感谢以下人士,他们在这个月对 .NET 效率(又名 Roslyn)做出了贡献:
- Valery (@m08pvv):已提高的循环固定条件 PR #52168
- Martin Strecker (@MaStr11):支持其他内插字符串的内联 PR #49229,强制转换、索引器和操作符的 IntelliSense PR #47511
- Bernd Baumanns (@bernd5):修复在 SyntaxNode-Update 方法中使用默认值导致的“信息丢失”PR #52036,修复初始化表达式的 NormalizeWhitespace 字符串内插的问题 PR #51213
- C-xC-c (@C-xC-c):将记录相等性参数命名为“左”和“右”PR #51973
- Kai Jellinghaus (@HurricanKai):将 Compilation.CommonSyntaxTrees 更改为使用 ImmutableArray PR #51905
- Huo Yaoyuan (@huoyaoyuan):忽略命名样式中的 extern 方法 PR #51728,解决目标 net5.0 中发现的 NRT 问题 PR #50895
- Alireza Habibi (@alrz):修复带圆括号的模式分析 PR #49621
- Paul M Cohen (@paul1956) 添加对 Visual Basic 的代码清理支持 PR #48092
- Petr Onderka (@svick):使 DocumentationCommentCompiler 在 NormalizeWhitespace 后工作 PR #47360
- Youssef Victor (@Youssef1313):将 IDEDiagnosticIDConfigurationTests 更新为独占,而不是非独占 PR #52078的 ImportingConstructor PR #52073,VB 和 C# 之间的一致性 ContainsSyntaxTree 行为 PR #52050, 确保获取 nameof 参数的名称 PR #52016,修复 SyntaxFactory.UsingStatement 的 null 批注 PR #51984,简化 CSharpRequiredLanguageVersion PR #51881,显示 #error 版本的有效语言版本 PR #51880,更新 SymbolEqualityComparer.IncludeNullability 文档 PR #51724,包括 TryGetMethodDescriptorAsync 中的源生成器 PR #51686,将模式设为可绑定 PR #51620,使用 SyntaxToken.Value 中的 Boxes PR #51546修复函数指针 RefKind 显示 PR #51223,处理 switch 表达式中的模式 PR #50984,将 ImplementationAttributes 添加到 IMethodSymbol PR #50560
- Benjamin Schäublin (@bschaeublin):
- 修复了 MetadataReference 重载的注释语句中的冗余文本 (PR #51242)
- Martin Strecker (@MaStr11):
- piotrstenke (@piotrstenke):
- 更新了 GeneratorContexts.cs 中
<see>
标记内指向自身的属性 (PR #50896)
- 更新了 GeneratorContexts.cs 中
- Huo Yaoyuan (@huoyaoyuan):
- 更新了关键字推荐器以了解结构只读成员 (PR #50820)
- Yair Halberstadt (@YairHalberstadt):
- 支持析构中的混合声明和赋值 (PR #44476)
- Youssef Victor (@Youssef1313):
Razor (ASP.NET Core) 预览版编辑器
新的预览版 Razor 编辑器现在支持以下 Razor 编辑功能:
- IntelliSense 补全现在可以筛选 HTML 组件、TagHelper 元素和 C# 属性:
- 对 C# 替代项进行 IntelliSense 补全。
- 对通用组件的“转到定义”支持。
- 制表符和空格的新代码样式配置选项。 键入、格式化和创建新的 Razor 文件时,将遵循这些代码样式。 可以在“工具”>“选项”>“文本编辑器”>“Razor (ASP.NET Core)”>“制表符”中配置制表符和空格。
- “工具选项”中的 Razor 文本编辑器已从 ASP.NET Core Razor 语言服务重命名为 Razor (ASP.NET Core) 。
若要启用新预览版 Razor 编辑器,请转到“工具”>“选项”>“环境”>“预览功能”,选择“启用实验性 Razor 编辑器”,然后重新启动 Visual Studio。
测试体验辅助功能改进
- Console.Writeline 现在显示在测试资源管理器中! 长输出在“测试详细信息摘要”窗格中显示为可折叠部分。 超过特定长度的输出将显示前面几行,后面部分将被截断,同时提供在单独的窗口中打开测试日志的选项。 如果超过 20 帧,则堆栈跟踪将截断,然后仅显示前 10 帧和后 10 帧。 截断设计的重要部分集中在测试运行具有大量输出时减少 VS 冻结。 具有大型输出的测试将不再阻止 UI 线程。
- 测试输出现在可以保留标记,因此即使从日志文件中也可以浏览超链接和堆栈跟踪链接。 这些链接现在也很容易通过键盘输入。
- 如果输出超过 300 个字符,或者附加到测试结果的文件超过 10 个,则会为单个测试结果创建日志文件。 日志文件现在也可以在预览中打开,这样可以更轻松地管理选项卡。 日志文件和测试资源管理器支持按 Ctrl PgUp/PgDn 导航光标,并按 Shift + Ctrl PgUp/PgDn 进行选择。
- 日志文件编辑器现在正在使用 IVsTextView 接口,这意味着它现在能够打开非常大的文本文件。 这样,用户就无需
Copy All
截断日志并在记事本等单独的编辑器中打开它们。 对于 MSTest,我们现在还加入了一个聚合了所有输出的单个日志文件,而不是对每个数据行使用单独的日志文件。
测试工具
- 现在,你可以在 Ubuntu 和 Alpine 上的命令行使用 dotnet cli 获得跨平台代码覆盖率。 对于希望在针对这些平台的计算机上获得代码覆盖率的用户,你现在可以添加通常在 Windows 上使用的相同代码覆盖率收集命令。 查看更多关于 dotnet test 的文档。
- 现在,测试资源管理器中的“全部折叠”按钮旁边有一个“全部展开”按钮。 此命令已可以通过键盘快捷键(Ctrl+A,Ctrl+ 向右键)使用,但是更多的反馈表明添加一个按钮值得额外的 UI。 依旧感谢你让我们通过 https://developercommunity.visualstudio.com/ 了解了你的想法。
- 测试资源管理器显示“过期”的方式也有一些细微的更改。 “过期”指灰显或“褪色”测试结果,指示结果不是来自最新的测试运行。 如果结果不是最近的测试运行的一部分,它将显示为过时。 以前,新的测试发现(甚至是重新发现的旧测试结果)也用纯色图标显示。 这引起了一些困惑 - 为何一些“未运行”测试显示为褪色,而其他的则没有。 此更改将降低过期的复杂性。
- 通过持久化测试结果功能(在版本 16.2 中添加),即使关闭并重新打开 Visual Studio,也可以看到上次测试运行的测试结果。 这可以帮助用户记住其中断位置,并提供更多上下文,而无需再次测试运行。 我们还修改了持久化结果的行为,这样它们将始终显示为过时。 这更好地表明它们不是来自在当前 Visual Studio 会话期间执行的测试运行。
Web 工具
通过动态配置,可以自动使用中间件来刷新配置资源。 作为连接服务的应用程序配置现在可以自动将动态配置集成到应用程序中。 若要使用此连接服务,请单击“连接服务”,然后将 Azure 应用程序配置添加为服务依赖项。
Windows 应用程序打包项目“依赖项树”
- 在去年工作的基础上,为在 Windows 应用程序打包项目 (WAP) 中启用 NuGet 包引用,我们已在 WAP 的解决方案资源管理器中启用新 UI。 旧版界面不会显示这些包引用,也不可通过 UI 添加 NuGet 包。
- 在新版界面中,我们已借助 CPS 和 .NET 项目系统启用“依赖项树”,该树不仅仍可通过“应用程序”子树显示项目引用,而且还提供“包”子树来帮助你管理 NuGet 包。
XAML 工具改进(WPF 和 Xamarin.Forms)
Xamarin.Forms
在此版本中,我们为 Xamarin.Forms 客户对 XAML IntelliSense 和 XAML 热重载做了两个小的改进。 热重载“仅更改”将不再针对以下项报告假错误:
- VisualStateManager 中引用属性但不指定类型的资源库,例如
<Setter Property="BackgroundColor" Value="Red">
。 - 未包装到 <ResourceDictionary.MergedDictionaries> 元素中的已合并 ResourceDictionaries
示例:
<Application>
<Application.Resources>
<ResourceDictionary Source='Colors.xaml'/>
<Style TargetType='Label'> ... <Style>
</Application.Resources>
</Application>
XAML 示例数据
在此版本中,我们通过引入一种新方法将一般示例数据添加到 ItemsControls,进一步增强了 XAML 设计器的设计时数据功能。 此功能仅适用于 WPF 中的 ListBox、ListView 和 DataGrid。
- 通过对 ListBox、ListView 或 DataGrid 设置
d:ItemSource='{d:SampleData}'
可以启用示例数据 - 这会在设计器中仅使用一组与 DataTemplates 和绑定路径匹配的 5 个项来填充控件
- 可以使用
ItemCount
属性来更改生成的项数,例如:d:ItemSource='{d:SampleData ItemCount=3}'
XAML 设计器快速操作
XAML 设计器中选定控件的角落附近有一个新灯泡,该工具可用于快速访问该控件的常用编辑属性。
支持的控件包括:
- UWP:边框、按钮、画布、复选框、组合框、网格、超链接按钮、图像、列表框、列表视图、导航视图、单选按钮、滑块、堆叠面板、文本块、文本框
- WPF:边框、按钮、画布、复选框、组合框、网格、图像、标签、列表框、列表视图、堆叠面板、文本块、文本框
此功能适用于 UWP、WPF、.NET Core 和 WPF .NET Framework(需在选项对话框中启用“面向 .NET Framework 的新版 WPF XAML 设计器”预览功能)。
XAML 设计器快速操作还具有扩展模型。 如需详细了解如何创建自己的操作,请参阅 XAML 设计器扩展性 GitHub
适用于 XAML 的 MVVM 工具
在此版本中,我们在 XAML 编辑器中引入了一个灯泡来创建视图模型。 当检测到项目中正在使用 MVVM 框架时,这个灯泡出现在 XAML 文档的根元素上。 该对话框允许自定义生成的视图模型命名空间、文件夹和继承的基本视图模型。
灯泡还将生成的视图模型设置为 XAML 文档的 x:DataType(Xamarin.Forms) 或 d:DataContext(所有其他平台),这使用户可以进一步利用 XAML 编辑器灯泡在视图模型中生成绑定属性和命令。
Service Fabric 工具
此功能在 Service Fabric 应用程序设计中引入了 StartupServices.xml 文件。 此文件承载 ApplicationManifest.xml 的 DefaultServices 节。 使用此实现时,DefaultServices 和服务定义相关的参数将从现有 ApplicationManifest.xml 移动到这个名为 StartupServices.xml 的新文件。 此文件用在 Visual Studio 的每个功能(生成/重新生成/F5/Ctrl+F5/发布)中。
此版本中已修复的主要问题
- 修复了 C# 开发人员调用 Edit.SmartBreakline 命令将删除属性访问器中的所有内容的问题。
- 修复了开发人员更新代码样式设置会将更改应用于所有 Visual Studio 实例,而不只是应用于所需文件夹内的问题。
- 每当打开本机项目或合并项目时,“应用代码更改”图标就会显示。 只有在开发人员开始调试之后,才会启用此功能。
- 修复了 AudioUnitPropertyIDType 中的中断性变更
- 修复了使用 UWP 单元测试框架的开发人员无法在远程设备上运行测试的问题。
来自开发者社区
以下是 16.10 中发布的得票最多的一些问题:
- .sqlproj 不随更改而更新
- 复合文本初始值设定项中的数组访问给出了不正确的偏移
- Visual Studio 2019 Preview 2 标准 C++ 库模块问题/注释
- Visual Studio 2019 仍会在我每次触摸 CMakeFiles.txt 或 CMakeSettings.json 时擦除 CMakeBuild 目录
- 如果在 Lambda 中,则 MSVC 不考虑 constexpr
- Noexcept 默认构造函数
- 如果设置了 /Wall,则 #Pragma warning(push, )) 不会禁用其作用域的所有警告
- Constexpr-if 和未用参数
- 无法声明 constexpr initializer_list
- C++latest 混淆了模板参数中的调用约定
- 无法检查 Visual Studio 2019 的更新
- “Git 比较”窗口显示未选中“忽略剪裁空格”时,文件中的所有内容都已更改。
- 插入了空格,而非制表符。
- ASP.NET Core 5 中的 Visual Studio 调试程序可视化工具和 BinaryFormatter
- Linux 版 VS:在 16.9 更新后,远程计算机上的输出文件会构建到错误位置。
- 重新启动 Visual Studio 时,某些已开启的固定选项卡将被取消固定。
- Visual Studio 2019 升级至 16.9.4 时引发编译/链接错误。
- 对 c++/cli ref 类执行方法调用期间,GC 会收集对象
- CRT 的 Trace.cpp 中的 EncodePointer/DecodePointer 逻辑 bug。
- 元素具有无效值“EnableAllWarnings”。
- 系统针对有效代码报告 E0144。(Intellisense 错误)
- 升级到 Visual Studio v16.9.0 后,“模板参数无效,预期的编译时常数表达式”
- 在我每次点击 CMakeFiles.txt 或 CMakeSettings.json 时,Visual Studio 2019 仍会擦除 CMakeBuild 目录。 (https://developercommunity.visualstudio.com/t/sizeof-array-to-pointer-VC-weirdness/1396250) * [Sizeof 数组到指针 VC 出现异常]
- 更新到 Visual Studio Community 2019 16.9.0 版后,Xamarin.Android 中出现非法字符异常
- Microsoft.VisualStudio.TestStorage.TestStoreIndexingException: 未能添加结果以供测试
- Linux 版 VS:在 16.9 更新后,远程计算机上的输出文件会构建到错误位置
- 重新启动 VS 时,某些已开启的固定选项卡将被取消固定
- 回归 16.9.0: F7(即“查看代码”)在 Xamarin Xaml 文件中无效
- cl.exe 花费超过 5Gb ram 来编译相当小的一段代码。
- 将 TypeConverter 属性应用于自定义枚举类型时,枚举值不显示在建议的操作中
- 测试资源管理器在 netcore3.1 和 net5.0 下无法执行任何测试,但适用于 net461
- 使用 /O2 生成的错误代码
- 上下文菜单中的“查看代码”不工作
- 错误 C1001:内部编译器错误(编译器文件 'D:\a01_work\4\s\src\vctools\Compiler\Utc\src\p2\main.c',第 213 行)
- 尝试从 VS 扩展对话框中删除实时共享在安装程序中失败
- Msvc 接受模板函数中指针和整数之间的无效比较
- Visual Studio 在 IntelliSense 浏览时停止响应。
- 由于 vcpkgsrv 崩溃,IntelliSense 中断
- vcpkgsrv.exe 进程列表不断增加。
- Visual Studio 合并分支显示错误的分支名称。
- Visual Studio 2019 常见错误:“应用程序调用了为另一个线程封送的接口”。
- 从代码文件开始测试(例如,使用 Ctrl+R、T)尝试加载 LiveShare 组件,即使该组件未安装。
- 当项目引用具有不同目标运行时的类库项目时,适用于 .NET Core 3.1 和 .NET 5.0 的 ClickOnce 发布可能会失败。
- 已修复 E1504:使用 C++20 模块时出现的内部错误。
- C++ IntelliSense 无法识别“using enum”。
- Visual Studio 2019 Enterprise RTM - 基于 .NET SDK 的项目 (TargetFrameworkMoniker .NET 4.7.2)。
- 修复了分析配置输出时的错误。
- 未安装 LiveShare 时会出现“‘VslsFileSystemProviderVSCorePackage’包未正确加载”消息。
- 生成 Xamarin iOS 绑定项目不再适用于 Visual Studio v16.9。
- 工具集 16.9 生成静态库的回归 vcxproj:不再将 pdb 复制到输出。
- 与远程 Linux 计算机的连接使用不正确的目标路径。
- 修复了复制初始化:重载解决问题。
- 使用 range-v3 库时出现不正确的 IntelliSense 乱码。
- 在 DiagnosticDataSerializer.ReadDiagnosticDataArray 中的异常后显示金色条。
已知问题
通过以下链接查看 Visual Studio 2019 中所有待解决问题和可用暂避方法。
反馈和建议
我们期待你的宝贵意见和建议! 如有问题,请通过安装程序或 Visual Studio IDE 右上角的“报告问题”选项告知我们。 必须向 图标位于右上角。
可以在 Visual Studio 开发者社区中提出产品建议或跟踪问题,也可在其中提问、寻找答案和建议新功能。 此外,还可通过实时聊天支持获得免费安装帮助。
Blogs
通过参考开发人员工具博客网站中的见解和建议,随时掌握所有新版本的最新最全资讯,并发表有关大量功能的深入分析帖子。
Visual Studio 2019 发行说明历史记录
要详细了解 Visual Studio 2019 的历史版本,请查看 Visual Studio 2019 发行说明历史记录。