Visual Studio 2019 版本 16.8 发行说明
开发者社区 | 系统要求 | 兼容性 | 可分发代码 | 发布历史记录 | 许可条款 | 博客 | Visual Studio 新增功能文档
注意
此版本不是最新版本的 Visual Studio。 若要下载最新版本,请访问 Visual Studio 网站。
Visual Studio 2019 版本 16.8 中的新增功能
支持的时间范围
此版本现已不受支持。 有关 Visual Studio 支持的详细信息,请查看 Visual Studio 2019 的支持策略。
请参阅最新版本的发行说明或访问 Visual Studio 站点下载最新支持的 Visual Studio 2019 版本。
Visual Studio 2019 版本 16.8 发行版
- 2021 年 3 月 9 日 - Visual Studio 2019 版本 16.8.7
- 2021 年 2 月 22 日 — Visual Studio 2019 版本 16.8.6
- 2021 年 2 月 9 日 — Visual Studio 2019 版本 16.8.5
- 2021 年 1 月 12 日 — Visual Studio 2019 版本 16.8.4
- 2020 年 12 月 8 日 — Visual Studio 2019 版本 16.8.3
- 2020 年 11 月 19 日 — Visual Studio 2019 版本 16.8.2
- 2020 年 11 月 12 日 — Visual Studio 2019 版本 16.8.1
- 2020 年 11 月 10 日 — Visual Studio 2019 版本 16.8.0
Visual Studio 2019 已存档的发布说明
- 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.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.8 中采用的所有开发人员社区项的完整列表
Visual Studio 2019 版本 16.8.7
发布时间:2021 年 3 月 9 日
在此版本 Visual Studio 2019 v16.8.7 中解决的问题
安全顾问公告
CVE-2021-21300 Git for Visual Studio 远程代码执行漏洞
当 Visual Studio 克隆恶意软件时,会存在远程代码执行漏洞。
CVE-2021-26701 .NET Core 远程代码执行漏洞
由于文本编码的执行方式,.NET 5 和 .NET Core 中存在远程代码执行漏洞。
Visual Studio 2019 版本 16.8.6
发布时间:2021 年 2 月 22 日
在此版本 Visual Studio 2019 v16.8.6 中解决的问题
- 修复了阻止开发人员将代码从 Visual Studio 2019 推送到 Azure Functions 或其他 Azure 资源的高优先级 bug。
- VS 16.8.5 创建 Git 存储库 - 新建 GitHub 存储库 - PUBLIC(没有选中“专用”选项)- FAIL
Visual Studio 2019 版本 16.8.5
发布时间:2021 年 2 月 09 日
安全顾问公告
CVE-2021-1639 TypeScript 语言服务远程代码执行漏洞
当 Visual Studio 加载包含 JavaScript 或 TypeScript 代码文件的恶意存储库时,会存在远程代码执行漏洞。
CVE-2021-1721 .NET Core 拒绝服务漏洞
在 X509 证书链生成期间创建 HTTPS Web 请求时存在拒绝服务漏洞。
CVE-2021-24112 .NET 5 和 .NET Core 远程代码执行漏洞
释放图元文件时,如果图形界面仍有对它的引用,则会存在远程代码执行漏洞。 此漏洞仅存在于在 MacOS 或 Linux 上运行的系统中。
在此版本 Visual Studio 2019 v16.8.5 中解决的问题
- 修复在 ExtensionSDK 下安装 x86 Microsoft.VCLibs Appx 时使用正确的签名更新的问题。
- 修复了使用 C++ DesignTime 功能时的内存泄漏。
- 修复了将现有数据库导入到 SSDT 项目时未记住密码的情况下会发生异常的问题。
- 解决了客户首次将 .NET Core 项目发布到文件夹或其他承载目标时禁用发布按钮的问题。
- 修复了当开发者打开发布配置文件视图页面时偶尔发生的挂起。
- 添加了 Xcode 12.4 支持。
来自开发者社区的项
- 修复了 .sqlproj 不会随更改而更新的问题。
- Visual Studio 2019 在 Chromium 解决方案中出现 OOM 故障。
- Visual Studio 2019 版本 16.7.6 的优化编译器中的 bug
- 在数据库项目中单击“添加新项”>“表”时,Visual Studio 出现故障。
- VSDIIUnregisterServer 正在降低 Visual Studio 2019 的运行速度。
- 停靠或拆分 Windows 时出现意外的 Visual Studio 2019 故障。
Visual Studio 2019 版本 16.8.4
发布时间:2021 年 1 月 12 日
安全顾问公告
CVE-2021-1651 / CVE-2021-1680 诊断中心标准收集器服务特权提升漏洞
如果诊断中心标准收集器对数据操作的处理不当,就会存在特权提升漏洞。
CVE-2020-26870 Visual Studio 安装程序远程代码执行漏洞
Visual Studio 安装程序尝试显示恶意 markdown 时存在远程代码执行漏洞。
CVE-2021-1723 ASP.NET Core 和 Visual Studio 拒绝服务漏洞
Kestrel 分析 HTTP/2 请求的方式存在拒绝服务漏洞。
在此版本 Visual Studio 2019 v16.8.4 中解决的问题
- 修复了对于已在较旧版本的 Visual Studio 中从 Visual Studio Marketplace 安装了 IntelliCode 的情况,可能无法安装 C# IntelliCode 组件的问题
- 现在,如果 PackageReference 项目引用具有 PackageReference 依赖项的包 .config 项目,则会使用可传递项目引用。
- 添加了 Xcode 12.3 支持。
- 修复了 x86_64 watchOS 7.0+ 模拟器支持
- 我们已修复误报 (C33001 ~ C33005),用于从函数返回的 VARIANT。
- 修复关闭项目或解决方案时 WinForms .NET Core 设计器中的间歇性 VS 故障。
- 修复了数据库项目:将文件从解决方案资源管理器拖动到打开的文件时,将从文件系统中删除该文件!
- 已修复以下错误:单击 SQL 架构比较上的“更新”时不会保存对 sqlproj 文件所做的更改
- 已修复以下 bug:生成失败,出现错误“找不到表/列”。
- 修复“团队资源管理器”->“分支”中的“合并后提交”复选框。
- 修复了以下错误:检查更新时,Visual Studio 可能会在几秒钟内变得无响应。
- DeploymentAppRecipe.exe 工具现在支持从任何当前目录运行。 它现在还会在部署失败时返回非零返回值,并将错误消息输出到标准错误流。
来自开发者社区
- 在 16.8 更新之后,尽管某些规则集设置为警告,但还是出现了大量的代码分析错误
- 由 ClickOnce 安装的 .NET Core 3.1 或 .NET 5.0 应用程序可能无法在其安装之后启动。
- 关于 _variant_t 的 C33005 误报
- Git 合并和提交操作 bug
- 无法通过 net5.0-windows* TFM 查看任务或并行堆栈信息
- 单击 SQL 架构比较上的“更新”时不会保存对 sqlproj 文件所做的更改
- 数据库项目:将文件从解决方案资源管理器拖动到打开的文件时,将从文件系统中删除该文件!
- Visual Studio 2019 上的 Intellicode 模型训练失败
- 打开 LiveShare 协作会话失败
Visual Studio 2019 版本 16.8.3
发布时间:2020 年 12 月 8 日
安全顾问公告
CVE-2020-17156 Visual Studio 远程代码执行漏洞
当 Visual Studio 克隆恶意软件时,会存在远程代码执行漏洞。
在此版本 Visual Studio 2019 v16.8.3 中解决的问题
- 修复了在父类外部定义嵌套函数模板时出现的内部编译器错误。
- 修复了在非静态数据成员的初始化表达式中使用“this”时出现的不当错误 C2355。
- 已为使用 /analyze:ruleset 选项(带 /analyze:rulesetdirectory 和/或 /analyze:projectdirectory 选项)的自定义规则集修复了规则集加载错误。
- 解决在使用 WinForms .NET Core 设计器时 Visual Studio 中出现的间歇性故障。
- 在 Visual Studio v 16.8.3 中插入 .NET 5.0.1
- 解决了某些 UI 上下文激活的工具窗口可能会导致 Visual Studio 故障的问题。
- 修复了在没有 Git 远程跟踪分支的情况下来自“管理分支”页的推送。
- 添加了 Xcode 12.2 支持。
来自开发者社区
Visual Studio 2019 版本 16.8.2
发布时间:2020 年 11 月 19 日
此次发布的 Visual Studio 2019 版本 16.8.2 中解决的问题
- 针对循环中的优化 bug 进行了修复。
- 修复了保证复制省略(C++17 功能)的实现中的内部编译器错误。
- 解决了大量使用匿名类型时生成性能下降的问题。
- 解决了编辑 C# 代码时显示带“指定的参数在有效值范围之外”消息的金色栏这一问题。
- 解决了在构建具有 T4 模板的项目时导致出现 MissingMethodException 的问题。
- 解决了“新建项目”对话框中的搜索不返回任何结果的问题。
来自开发者社区
- SolutionAssetStorage.GetAssetAsync 结果在金色栏中报告 KeyNotFoundException
- IntelliSense 失败,因为设计时生成找不到“GetClCommandLineForReference”目标
- GetAssetAsync 报告出现 IOException(管道已损坏)
- 搜索不起作用
- 优化器错误地删除了 EH 信息,导致某些异常崩溃
Visual Studio 2019 版本 16.8.1
发布时间:2020 年 11 月 12 日
此次发布的 Visual Studio 2019 版本 16.8.1 中解决的问题
- 解决了影响较大的问题:“SourceExplorerPackage”包未正确加载。 在团队资源管理器中克隆存储库时会弹出警告。 用户遇到此问题时,会导致产品停止响应。
Visual Studio 2019 版本 16.8.0
发布时间:2020 年 11 月 10 日
此次发布的 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 内部函数支持。
- 添加了一个新的链接选项
legacy_stdio_float_rounding.obj
,以启用输出浮点值的旧行为,该行为在 Dev16.2 中已更改,以正确舍入可精确表示的浮点数。 有关详细信息,请参阅 printf、_printf_l、wprintf、_wprintf_l。
- 对 .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 存储库”窗口中的分支历史记录之间进行切换
- 打开存储库后,在解决方案资源管理器中查看并选择解决方案列表
- 通过“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 创建和连接添加了附加功能。
- 修复了一个 bug。当关闭或退出 ASP.NET Core 解决方案时,该 bug 导致 Visual Studio 2019 崩溃或停止响应。
- 修复了卸载并重新安装 Visual Studio 2019 后,C++ 项目系统无法加载的问题。
Visual Studio 2019 版本 16.8.0 中的新增功能详细信息
C++
- 现在,/std:c++latest 和 <coroutine> 标头中支持 C++20 协同例程。 在 <experimental/coroutine> 和 /await 开关中提供对旧行为的支持。
- IntelliSense 现提供对 C++20 <concepts> 和 <ranges> 标头的支持,还支持重命名和浏览概念定义。 存在一项我们预计将在预览版 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。
- 在 ProjectDir/FakesAssemblies 中添加对生成的 Fakes 程序集的引用。
还可按照开发者社区反馈获取其他更新。
实验性 Razor 编辑器更新
新的实验性 Razor 编辑器现在支持以下 Razor 编辑功能:
- Blazor 灯泡:
- 提取到代码后置*:
- 根据标记创建组件*
- 为组件添加
@using
指令 - 完全限定组件标记名称
- C# 灯泡
- 添加
@using
指令 - 完全限定类型名称
- 添加
- 使 Razor 格式化得到增强
- 从 .razor 文件中重命名标记中的 Razor 组件
- Blazor 组件标签名称的“转到定义”功能
- C# 悬停着色
- C# 完成工具提示着色
- 在已关闭的 Razor 文件中“查找所有引用”
- 针对大型项目和解决方案,改进了 Razor 编辑性能和稳定性
* 仅适用于本地 Razor 方案,Visual Studio Codespaces 或 Live Share 中尚不支持该功能。
若要启用实验性 Razor 编辑器,请转到“工具”>“选项”>“环境”>“预览功能”,选择“启用实验性 Razor 编辑器”,然后重新启动 Visual Studio。
Visual Studio 2019 IDE
- 使用熟悉的 Visual Studio 帐户管理体验添加 GitHub 帐户。 版本控制、集成终端和其他功能随后将能够使用你的帐户凭据来满足其 GitHub 身份验证需求。
- ClickOnce 发布提供程序现可用于 .NET Core 3.1 和 .NET 5.0 Windows 桌面应用程序。 若要开始使用,请在解决方案资源管理器中右键单击项目,然后选择“发布”,或选择“生成”>“发布 <AppName>”菜单。 可以在文件夹类别下找到 ClickOnce。
Git 效率
- 基于 Azure DevOps 工作项创建一个新分支
- 从 Git 菜单中的本地存储库列表打开 Git 存储库
默认源代码管理提供程序现在是 Git 而不是 TFVC;你可通过“工具”-“选项”-“源代码管理”进行更改
单击可在“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>
”,删除内联方法声明:
选择“内联并保留 <QualifiedMethodName>
”,保留原始方法声明:
如果根据模板创建新的 C# 或 Visual Basic 文件,则会采用 EditorConfig 代码样式设置。 创建新文件时,将自动应用以下代码样式:文件标头、使用指令排序和在命名空间内外使用指令替换。
现在有对 C# 和 Visual Basic 的内联参数名称提示支持,可在函数调用中的每个参数之前插入对文本、强制转换文本和对象实例化的修饰。 首先,需要在“工具”>“选项”>“文本编辑器”>“C#”或“Basic”>“高级”中启用此选项,然后选择“显示内联参数名称提示(实验性)”。 然后,内联参数名称提示将出现在 C# 或 Visual Basic 文件中。
- 现在可以使用新的“提取基类”重构,来将所选类中的成员提取到新的基类。 将光标置于类名或突出显示的成员上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“将成员拉取到新的基类”。 此时将打开新的“提取基类”对话框,你可以在其中指定基类的名称以及应放置到的位置。 可以选择想要传输到新基类的成员,然后选中“设为抽象”列中的复选框,来选择将成员设为抽象成员。
选择“确定”后,将看到添加的新基类及其成员。
- 现在有代码修复功能,可使用 C# 将的 typeof(
<QualifiedType>
).Name 实例转换为 nameof(<QualifiedType>
),可使用 Visual Basic 将 GetType(<QualifiedType>
).Name 实例转换为 NameOf(<QualifiedType>
)。 使用 nameof 代替类型名称可避免检索对象时涉及反射。 将光标置于 typeof(<QualifiedType>
).Name 内。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 接下来,选择以下选项之一:
对于 C#,选择“将 nameof
转换为 typeof
”:
对于 Visual Basic,选择“将 NameOf
转换为 GetType
”:
- 代码清除包含新的配置选项,这些选项可将 EditorConfig 文件中设置的格式设置和文件头首选项应用于单个文件或整个解决方案。
- 现有一个代码修复,可在不应通过引用传递参数时删除
in
关键字。 将光标置于错误上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选“删除 "in" 关键字”。
- 现有一个重构,其中引入了新的 C#9 模式组合器。 除了在适用时将
==
转换为使用is
等模式匹配建议,此代码修复还会在匹配多个不同模式和否定时建议使用模式组合子and
、or
和not
。 将光标放在语句中。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“使用模式匹配”。
- 现有一个代码修复,尝试在非抽象类中编写抽象方法时,可以将类变为抽象类。 将光标置于方法错误上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“将类变为‘抽象’”。
- 在 16.7 预览版 1 中,我们在 DateTime 和 TimeSpan 字符串文本中添加了 IntelliSense 完成项。 在此版本中,键入第一个引号时,将自动显示此完成列表。 过去,需要键入(Ctrl+空格)才能查看此完成列表。 将光标置于 DateTime 或 TimeSpan 字符串文本中,然后键入第一个双引号。 然后,你将看到完成选项和每个字符所表示内容的说明。 将提供日期时间格式和示例。
- 现有一个代码修复,可删除不必要的 pragma 抑制和不必要的
SuppressMessageAttributes
。 将光标置于 pragma 警告或SuppressMessageAttribute
上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“删除不必要的抑制”。
- “重命名”和“查找所有引用”现在可以理解对全局
SuppressMessageAttribute
抑制目标字符串内符号的引用。
- Visual Basic 允许通过多种方法传递参数、ByVal 和 ByRef,在很长时间内 ByVal 都是理想之选。 我们现在要淡化 ByVal,表明并不需要它,并提供代码修复来删除不必要的 ByVal。 将光标置于 ByVal 关键字上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“不需要 "ByVal" 关键字,可将其删除”。
- 现在提供对多个运行时(例如 .NET Framework 和 .NET Core)的交互式窗口支持。
- 有一个新的 RegisterAdditionalFileAction API,分析器作者可通过它创建适用于其他文件的分析器。
测试资源管理器的“测试详细信息”窗格自动换行
很多用户请求提供此功能,它允许用户选择文本换行或保留默认文本行对齐方式。 不需要文本对齐时,换行可以提升测试运行反馈的可读性,并且不再需要水平滚动条。 可以从测试资源管理器“设置”菜单或“摘要”窗格的上下文菜单中启用此设置。
XAML 工具(WPF、UWP 和 Xamarin.Forms)
XAML 绑定失败诊断改进
使用 WPF、UWP、WinUI 和 Xamarin.Forms 项目的开发人员必须经常在其应用程序中检测并解决 XAML 数据绑定失败。 为了在这种情况下改进诊断工具,我们在 Visual Studio 2019 版本 16.8 或更高版本中添加了两种新体验:
- XAML 绑定失败指示器图标:现在,在 WPF 和 UWP 项目的应用内工具栏中以及在所有 XAML 项目(包括 Xamarin.Forms)的实时可视化树中,均显示一个新的 XAML 绑定失败指示器图标。 如果检测到至少一个绑定失败,则此图标将显示一个红色指示器。 单击该图标也会转到新的“XAML 绑定失败”窗口。
- “XAML 绑定失败”窗口:现在,新的“XAML 绑定失败”窗口可用于 WPF、UWP、WinUI 和 Xamarin.Forms 项目。 这种新的专用体验为绑定失败信息提供了丰富的用户界面,该信息以前仅在输出窗口中可用。 改进功能包括将失败视为一组可以排序、自定义和完全可搜索的列。 我们还将相似的错误归为一组,以限制在某些数据绑定模板组合失败时可能出现的干扰,同时仍使所有原始错误信息均可用,并且可以通过右键单击菜单选项轻松复制。 (注意:需要使用 Xamarin 版本 4.5.0.266-pre3 或更高版本)
- 导航到绑定失败的源:与 WPF 团队合作,我们为那些针对 .NET 5(RC2 或更高版本)上的 WPF 的客户提供了导航到绑定失败源的功能。
XAML 热重载
- Xamarin.Forms“仅更改”XAML 热重载现在支持 UWP:在此版本中,我们开始推出对强烈要求的功能的支持,该功能可为 UWP 启用 Xamarin.Forms 项目中的新“仅更改”XAML 热重载支持。 请注意,此功能仍处于开发阶段,尽管现在编辑 XAML 会在运行中应用内触发更新,应用内工具栏(例如元素选择)等其他功能尚未完全实现,但会在将来版本中实现。
- XAML 热重载设置已移至“调试”>“热重载”:在此版本中,我们已将 WPF、UWP 和 Xamarin.Forms 中的 XAML 热重载设置合并到了“调试”>“热重载”下的统一设置屏幕中。 我们还首次启用了基于每个平台禁用或启用 XAML 热重载的功能,以使你能够完全控制何时可以使用此功能。 (注意:在此迁移过程中不会更改任何设置,因此你的所有现有选择将在这一新位置下继续保持有效)
XAML 代码编辑器:
- WinUI 3.0 IntelliSense 支持:在此版本中,我们为使用新的 WinUI 3.0 预览版 3 或更高版本构建应用的开发人员启用了更好的 IntelliSense 支持。 若要了解有关 WinUI 3.0 的详细信息,请参阅文档,若要提供反馈,请访问 Windows UI XAML GitHub 存储库。 注意:为了获得更新的工具体验,建议在 16.9 预览版 1 上使用最新的 WinUI 3.0 预览版。
- 改进 MVVM 支持:创作 XAML 文档时,可设置 d:DataContext 来为 XAML 文档获取准确的绑定 IntelliSense。 以前,手动指定数据上下文类型的操作很繁琐;你不得不退出 XAML 文档、找到所需的视图模型类型,再将其命名空间和名称复制粘贴到 d:DataContext 声明中。 在此版本中,我们引入了一项新功能,它让你能够通过建议可能的视图模型候选项的灯泡快速声明 d:DataContext。
扩展性
- 来自未引用的 NuGet 包的工具箱填充:在此版本中,我们现支持当使用未引用的 NuGet 包中的控件填充工具箱时使用 TargetFrameworkMoniker 特定的 VisualStudioToolsManifest.xml 文件。 因此例如,你的包可向 .NET Core 3.1 和 .NET 5.0 项目公开几组不同的控件。
来自开发者社区
- 无法编译面向 .NET 5 的 WPF 应用程序
- 从 Xamarin.iOS 的命令行使用 msbuild.exe 会在完成时挂起
- 禁用 IntelliCode 2.2.733.31896 会在编辑 .ts 文件时中断 TypeScript 3.x,且出现 CompositionFailedException
- TypeScript IntelliSense 保持停止
- VS2019 C++ - 通过 Optimize 生成的代码无效
- 后台任务无休止地报告“C/C++ IntelliSense 操作正在进行”
- WPF 设计器错误:计算节点路径无效 -- null->Window:Grid
- Visual Studio 16.8.0 预览版 4 进程消失
- 滚动浏览“异常设置”窗口导致 VS 故障
- 无法取消定义 atlstdthunk 中的 USE_ATL_THUNK2 宏
- Visual Studio Community 2019 16.7.x 频繁崩溃
- 转到 NuGet 包管理器时 Visual Studio 崩溃
- asan 和 avx2 导致报告堆栈缓冲区溢出
- 无法关闭 VisualStudio - 无法访问已释放的对象
- 遇到了 NullReferenceException 类型的异常。
- Visual Basic 分析器模板问题
- 在 .cs 文件中键入时,VS 崩溃
- C++ 代码分析(VS 2019 更新 8 预览版 3)中的新变量检查功能不显示/不起作用
- 使用外部依赖项文件打开 C++ 解决方案会导致这些外部依赖项文件选项卡显示“以下位置出现错误…”
- Windows SDK 8.1 C++ 生成在升级到 Visual Studio 16.7 后失败
- ARM64 C++:16.4 -> 16.5+ 回归。
- csproj 已在磁盘上发生更改。 请关闭编辑器,再重新打开它
- ServiceHub.Host.CLR.x64 已停止工作
- ASAN x64 - CMake 似乎不受支持
- 将最大并行编译作业数设置为等于可用处理器数目时,VS2019 WSL C++ 编译会间歇性失败
- 重新生成项目会删除整个输出文件夹(远程编译)
- 在我每次点击 CMakeFiles.txt 或 CMakeSettings.json 时,VS2019 仍会擦除 CMakeBuild 目录
- 未能加载 IntelliCodeCppPackage
- “/mnt/”前缀导致 CMake 项目 WSL 配置中出现生成错误
- CMake:升级到 VS 16.7 后,不再展开 CMakeSettings.json 中创建的环境变量
- 在对照项目源代码比较 DACPAC 时,架构比较不会评估 SQLCMD 变量
- 将生成和部署操作分开不得部署 .o 文件
- 带有分区的模块将不会编译
- 切换到选项卡时收到“正在处理”消息
- 多个同名的变量令 Visual Studio S2019 调试程序 产生混淆
- 方括号后突出显示字符串文本分隔符
- 无法使用默认不可构造的 promise_type 定义协同例程
- C/C++ IntelliSense:在 C 文件中,在匹配算术运算符(+、-、* 或 /)后键入 var 之后, 不显示任何成员列表
- 在另一文件中更改代码时,CodeLens 引用不更新
- “转到定义”功能会转到 std::function 构造函数而不是 Lambda 参数的类
- HLSL 着色器编译器未能为标头文件创建输出目录
- 意外错误 C2027:将模板与 /permissive 一起使用时,使用了未定义的类型
- D9025:用“/GS-”重写“/sdl-”
- constexpr 似乎无法正常处理指针引用
- 文档已作为项目或解决方案打开,目前无法在编辑器中打开。
- 16.7 中不显示 switch 表达式上的覆盖范围
- 即使已禁用,仍会引发 C5045 警告
- Xamarin.Forms 无法为 iOS 创建存档!
- 在 16.7.0 预览版 1 中,CImage::Draw() 对 DrawImage() 的调用不明确
- 使用固定任务栏图标加载“打开文件夹”项目时缺少视图
- C++:编译器选择了错误的重载候选项
- 无法通过 CodeFix 创建新的 VB VSIX 项目
- VS2019“查找结果”功能无法使用字体/颜色设置
- 编辑大型解决方案中的 editorconfig 文件会使编辑器非常缓慢、增加 CPU 和 RAM 使用量,有时会崩溃
- 使用 Ctrl+F 搜索结果会显示文本,但我想要通过结构化的新搜索结果窗口查看结果
- “发布”按钮无法显示
- 保存功能失效
- 不允许使用长度超过 60 个字符的解决方案/项目名称。
- “你有新的 Visual Studio Enterprise 2019 许可证”可用性消息。
- 有深色模式的 Git 视图显示不正确。
- 在后台执行代码分析时,Visual Studio 2019 崩溃,并且不会恢复文件。
- 在双重身份验证中添加 Apple 开发人员帐户失败。
- noexcept 中的折叠表达式生成语法错误。
- StreamPipeReader.AdvanceTo 中的 RPC 异常后显示金色条:没有可完成的读取操作。
- 使用设计面板编辑列时,SQL Server 项目崩溃。
- Visual Studio 2019 预览版:ssh+git:// 存储库不要求提供凭据,而是报告错误。
- Std::enable_if 不从重载集删除转换运算符。
- 拉取请求页面损坏。
- Enable_if_t SFINAE 问题
- Std::condition_variable::wait_for(0) 不会解除锁定
- 编译器不会捕获接受临时对象地址的行为。
- 重命名类和符号文件时引发 NullPointerException。
已知问题
通过以下链接查看 Visual Studio 2019 中所有待解决问题和可用暂避方法。
反馈和建议
我们期待你的宝贵意见和建议! 如有问题,请通过安装程序或 Visual Studio IDE 右上角的“报告问题”选项告知我们。 图标位于右上角。 可以在 Visual Studio 开发者社区中提出产品建议或跟踪问题,也可在其中提问、寻找答案和建议新功能。 此外,还可通过实时聊天支持获得免费安装帮助。
Blogs
通过参考开发人员工具博客网站中的见解和建议,随时掌握所有新版本的最新最全资讯,并发表有关大量功能的深入分析帖子。
Visual Studio 2019 发行说明历史记录
要详细了解 Visual Studio 2019 的历史版本,请查看 Visual Studio 2019 发行说明历史记录。