2019Logo 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 发行版

Visual Studio 2019 已存档的发布说明

Visual Studio 2019 博客

可从 Visual Studio 2019 博客获取来自 Visual Studio 工程团队的官方产品见解。 有关 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 版本 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 支持。

来自开发者社区的项


发行说明图标 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 工具现在支持从任何当前目录运行。 它现在还会在部署失败时返回非零返回值,并将错误消息输出到标准错误流。

来自开发者社区



发行说明图标 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 的问题。
  • 解决了“新建项目”对话框中的搜索不返回任何结果的问题。

来自开发者社区



发行说明图标 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_refstd::midpoint and std::lerpstd::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 内存热路径自动分析

实验性 Razor 编辑器更新

  • Blazor 灯泡
  • C# 灯泡
  • 使 Razor 格式化得到增强
  • 从 .razor 文件中重命名标记中的 Razor 组件
  • Blazor 组件标签命名空间的“转到定义”功能
  • C# 悬停着色
  • C# 完成工具提示着色
  • Razor 的实用定义/实现,包括已关闭的文件
  • 在已关闭的 Razor 文件中“查找所有引用”
  • 针对大型项目和解决方案,改进了 Razor 编辑性能和稳定性

具有 SDK 样式项目的 Fakes

  • 对 SDK 样式的项目使用新的 Fakes 支持时,一些用户在生成填充码时遇到以下问题

Git 效率

  • 详细了解如何使用新的联机文档中的所有 Git 功能
  • 通过“Git 更改”窗口、“视图”菜单和状态栏,随时打开“Git 存储库”窗口
  • 在“Git 更改”窗口中从多个远程库提取、拉取和推送
  • 在“Git 存储库”窗口顶部查看 Git 命令的成功消息和错误消息
  • 基于 Azure DevOps 工作项创建一个新分支
  • 从 Git 菜单中的本地存储库列表打开 Git 存储库
  • 现在,默认源代码管理提供程序是 Git,而不是 TFVC
  • 单击可在“Git 存储库”窗口中的分支历史记录之间进行切换
  • 打开存储库后,在解决方案资源管理器中查看并选择解决方案列表
  • 通过“Git 存储库”窗口中的工具栏修改历史记录视图并搜索提交
  • 从分支历史记录图中的传入和传出提交部分提取、拉取和推送
  • 在将分支推送到远程位置后获得创建拉取请求的提示
  • 在分支列表上下文菜单中查看合并和变基命令中的分支名称
  • 通过解决方案资源管理器和编辑器中的上下文菜单访问 Git 命令
  • 通过新的模式对话,可查看克隆进度,并可选择将进程移到后台

IntelliCode

  • 在 Visual Studio 文档中获取个性化 IntelliCode 完成项
  • 使用代码库使 IntelliCode 完成项保持最新状态,并作为团队的 CI 工作流文档的一部分进行共享

.NET 效率

  • 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 的代码修复
  • RenameFind All References 理解对全局 SuppressMessageAttributes 的目标字符串内符号的引用
  • ByVal 淡化表明并不需要它,并提供代码修复来删除 Visual Basic 中不必要的 ByVal
  • 对多个运行时(例如 .NET Framework 和 .NET Core)的交互式窗口支持。
  • 添加了新的 RegisterAdditionalFileAction API,分析器作者可通过它创建适用于其他文件的分析器。

Visual Studio 2019 IDE

  • 使用帐户管理体验添加 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_refstd::midpoint and std::lerpstd::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 + 修复”进行配置。
在 bools 上使用 bitwise & 而不是 logical && 时,即用类型 Linter 会显示警告
键入时 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.* 版本,则可使用以下暂时解决方法:

  1. 将 <FakesUseV2Generation>False</FakesUseV2Generation> 添加到 csproj 文件中的 PropertyGroup。
  2. 将 <Fakes Include="Fakes\*.fakes" /> 添加到 csproj 文件中的 ItemGroup。
  3. 在 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 身份验证需求。
GitHub 的内联参数名称提示
在 Visual Studio 中添加 GitHub 帐户
  • ClickOnce 发布提供程序现可用于 .NET Core 3.1 和 .NET 5.0 Windows 桌面应用程序。 若要开始使用,请在解决方案资源管理器中右键单击项目,然后选择“发布”,或选择“生成”>“发布 <AppName>”菜单。 可以在文件夹类别下找到 ClickOnce。
GitHub Image 的内联参数名称提示
Visual Studio 中的 ClickOnce 发布提供程序

Git 效率

  • 基于 Azure DevOps 工作项创建一个新分支
基于 Azure DevOps 工作项创建一个新分支
基于工作项创建新分支
  • 从 Git 菜单中的本地存储库列表打开 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 分析器”复选框
用于启用 .NET 分析器的“项目属性”窗口
用于启用 .NET 分析器的“项目属性”窗口
  • 现在有一个重构,它引入了在出现抑制运算符时与语法相匹配的新的 C# 9 not 模式。 将光标放在抑制运算符上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“使用模式匹配”。
引入与语法匹配的 C# 9 not 模式的重构
引入与语法匹配的 C# 9 not 模式的重构
  • 现在有一个内联方法重构,它可帮助你将单个语句中对静态、实例和扩展方法的使用替换为删除原始方法声明的选项。 将光标放在方法使用上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 接下来,选择以下选项之一:

选择“内联 <QualifiedMethodName>”,删除内联方法声明:

用于删除声明的内联方法重构
用于删除声明的内联方法重构

选择“内联并保留 <QualifiedMethodName>”,保留原始方法声明:

用于保留声明的内联方法重构
用于保留声明的内联方法重构
  • 如果根据模板创建新的 C# 或 Visual Basic 文件,则会采用 EditorConfig 代码样式设置。 创建新文件时,将自动应用以下代码样式:文件标头、使用指令排序和在命名空间内外使用指令替换。

  • 现在有对 C# 和 Visual Basic 的内联参数名称提示支持,可在函数调用中的每个参数之前插入对文本、强制转换文本和对象实例化的修饰。 首先,需要在“工具”>“选项”>“文本编辑器”>“C#”或“Basic”>“高级”中启用此选项,然后选择“显示内联参数名称提示(实验性)”。 然后,内联参数名称提示将出现在 C# 或 Visual Basic 文件中。

内联参数名称提示
内联参数名称提示
  • 现在可以使用新的“提取基类”重构,来将所选类中的成员提取到新的基类。 将光标置于类名或突出显示的成员上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“将成员拉取到新的基类”。 此时将打开新的“提取基类”对话框,你可以在其中指定基类的名称以及应放置到的位置。 可以选择想要传输到新基类的成员,然后选中“设为抽象”列中的复选框,来选择将成员设为抽象成员。
提取基类
提取基类

选择“确定”后,将看到添加的新基类及其成员。

对于 C#,选择“将 nameof 转换为 typeof

将 typeof 转换为 nameof
将 typeof 转换为 nameof

对于 Visual Basic,选择“将 NameOf 转换为 GetType

将 GetType 转换为 NameOf
将 GetType 转换为 NameOf
  • 代码清除包含新的配置选项,这些选项可将 EditorConfig 文件中设置的格式设置和文件头首选项应用于单个文件或整个解决方案。
“代码清除”中的格式设置和“文件头”支持
“代码清除”中的格式设置和“文件头”支持
  • 现有一个代码修复,可在不应通过引用传递参数时删除 in 关键字。 将光标置于错误上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选“删除 "in" 关键字”。
在关键字代码修复中移除
删除 `in` 关键字代码修复
  • 现有一个重构,其中引入了新的 C#9 模式组合器。 除了在适用时将 == 转换为使用 is 等模式匹配建议,此代码修复还会在匹配多个不同模式和否定时建议使用模式组合子 andornot。 将光标放在语句中。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“使用模式匹配”。
引入 C#9 模式组合子
引入 C#9 模式组合子
  • 现有一个代码修复,尝试在非抽象类中编写抽象方法时,可以将类变为抽象类。 将光标置于方法错误上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“将类变为‘抽象’”。
将类变为抽象
将类变为抽象
  • 在 16.7 预览版 1 中,我们在 DateTime 和 TimeSpan 字符串文本中添加了 IntelliSense 完成项。 在此版本中,键入第一个引号时,将自动显示此完成列表。 过去,需要键入(Ctrl+空格)才能查看此完成列表。 将光标置于 DateTime 或 TimeSpan 字符串文本中,然后键入第一个双引号。 然后,你将看到完成选项和每个字符所表示内容的说明。 将提供日期时间格式和示例。
DateTime 和 TimeSpan 字符串文本中的 IntelliSense 完成
DateTime 和 TimeSpan 字符串文本中的 IntelliSense 完成
键入冒号时,此改进还适用于内插字符串
键入冒号时,此改进还适用于内插字符串
  • 现有一个代码修复,可删除不必要的 pragma 抑制和不必要的 SuppressMessageAttributes。 将光标置于 pragma 警告或 SuppressMessageAttribute 上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“删除不必要的抑制”。
删除不必要的 Pragma
删除不必要的 Pragma
删除不必要的 SuppressMessageAttribute
删除不必要的 SuppressMessageAttribute
  • “重命名”和“查找所有引用”现在可以理解对全局 SuppressMessageAttribute 抑制目标字符串内符号的引用。
重命名 SuppressMessageAttribute
重命名 SuppressMessageAttribute
查找对 SuppressMessageAttribute 的所有引用
查找对 SuppressMessageAttribute 的所有引用
  • Visual Basic 允许通过多种方法传递参数、ByVal 和 ByRef,在很长时间内 ByVal 都是理想之选。 我们现在要淡化 ByVal,表明并不需要它,并提供代码修复来删除不必要的 ByVal。 将光标置于 ByVal 关键字上。 按 (Ctrl+.) 触发“快速操作和重构”菜单 。 选择“不需要 "ByVal" 关键字,可将其删除”。
Visual Basic 删除 ByVal 重构
Visual Basic 删除 ByVal 重构
  • 现在提供对多个运行时(例如 .NET Framework 和 .NET Core)的交互式窗口支持。
.NET Core 中的交互式窗口支持
.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 绑定失败”窗口和 LVT 图标
“XAML 绑定失败”窗口和 LVT 图标

XAML 热重载

  • Xamarin.Forms“仅更改”XAML 热重载现在支持 UWP:在此版本中,我们开始推出对强烈要求的功能的支持,该功能可为 UWP 启用 Xamarin.Forms 项目中的新“仅更改”XAML 热重载支持。 请注意,此功能仍处于开发阶段,尽管现在编辑 XAML 会在运行中应用内触发更新,应用内工具栏(例如元素选择)等其他功能尚未完全实现,但会在将来版本中实现。
  • XAML 热重载设置已移至“调试”>“热重载”:在此版本中,我们已将 WPF、UWP 和 Xamarin.Forms 中的 XAML 热重载设置合并到了“调试”>“热重载”下的统一设置屏幕中。 我们还首次启用了基于每个平台禁用或启用 XAML 热重载的功能,以使你能够完全控制何时可以使用此功能。 (注意:在此迁移过程中不会更改任何设置,因此你的所有现有选择将在这一新位置下继续保持有效)
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。
适用于 MVVM d:DataContext 的 XAML IntelliSense
适用于 MVVM d:DataContext 的 XAML IntelliSense

扩展性

  • 来自未引用的 NuGet 包的工具箱填充:在此版本中,我们现支持当使用未引用的 NuGet 包中的控件填充工具箱时使用 TargetFrameworkMoniker 特定的 VisualStudioToolsManifest.xml 文件。 因此例如,你的包可向 .NET Core 3.1 和 .NET 5.0 项目公开几组不同的控件。

来自开发者社区



已知问题

通过以下链接查看 Visual Studio 2019 中所有待解决问题和可用暂避方法。

反馈和建议

我们期待你的宝贵意见和建议! 如有问题,请通过安装程序或 Visual Studio IDE 右上角的“报告问题”选项告知我们。 “反馈”图标图标位于右上角。 可以在 Visual Studio 开发者社区中提出产品建议或跟踪问题,也可在其中提问、寻找答案和建议新功能。 此外,还可通过实时聊天支持获得免费安装帮助。


Blogs

通过参考开发人员工具博客网站中的见解和建议,随时掌握所有新版本的最新最全资讯,并发表有关大量功能的深入分析帖子。


Visual Studio 2019 发行说明历史记录

要详细了解 Visual Studio 2019 的历史版本,请查看 Visual Studio 2019 发行说明历史记录


返回页首