Visual Studio 徽标 Visual Studio 2022 发行说明

我们很高兴地宣布推出 Visual Studio 2022 v17.12。 这次更新的重点是针对使用 .NET 9 项目和新的 AI 生产力功能提供出色的开发人员体验,以及持续的全面改进。

功能

2024 年 11 月 12 日发布的 17.12 功能列表

工作效率

从错误列表复制 📣

从错误列表中复制错误现在仅将说明而不是整个行复制到剪贴板。

你在“错误列表”中看到一个不知道如何修复的错误。 因此,选择它并点击 Ctrl+C 以复制 Web 搜索的说明。 将其粘贴到搜索引擎后,你会发现它复制了所有列标题和行值,而不仅仅是说明。 现在,必须先删除除错误说明以外的所有内容,然后才能执行 Web 搜索。 这很麻烦,但现在我们有了解决方案!

错误列表复制修复

使用 Ctrl+C 从错误列表中复制错误时,只有描述会复制到剪贴板。 这使得在线搜索错误或与他人分享更容易。

仍可以通过右键单击错误并选择上下文菜单中的“复制行”或点击 Ctrl+Shift+C 来复制整个行。

如果要对错误说明执行的操作是执行 Web 搜索,只需点击 Ctrl+F1 即可在线搜索有关错误的信息。

📣 查看功能票证以分享你的反馈并继续对话。

转到代码搜索中的任意行 📣

在代码搜索中,现在可以导航到当前文档或其他指定文档中的特定行。

有时,你知道代码中的某一行存在问题,你想快速处理。 也许你被告知在某个文件的第 43 行抛出了一个错误,或者你想要到达特定文件的底部。

代码搜索现在支持快速导航到代码中的特定行。

打开代码搜索,然后使用冒号 + 行号转到当前文档中的一行。 例如,:39 将导航到活动文件中的第 39 行。

转到当前文档中的行

还可以使用文件名 + 冒号 + 行号转到其他文档中的行。 例如,Order:43 将导航到 Order.cs 中的第 43 行。 如果未指定确切的文件名,搜索将尝试查找最佳匹配项。

转到不同文档中的行

📣 查看功能票证以分享你的反馈并继续对话。

停靠代码搜索窗口 📣

现在,你可以自由地定位代码搜索窗口,使其具有停靠和自动隐藏等功能。

如果你需要“代码”或“功能搜索”不妨碍你,那么你现在可以更好地控制搜索窗口的行为。

现在,可以停靠搜索窗口并使用它执行工具窗口操作,如解决方案资源管理器等。

搜索停靠在底部

打开代码搜索功能搜索后,单击右上角的框图标,将其转换为工具窗口。 可以选择将其停靠在其他位置、弹出、自动隐藏等。可以通过单击右上角的图标恢复到可关闭的弹出窗口。

窗口右上角,第二个图标是工具窗口图标

我们还简化并清理了搜索中的预览体验。 现在有一个按钮,用眼睛图标表示,可以打开和关闭预览。

窗口右上角,第一个图标是预览面板图标

预览面板的位置也将根据搜索窗口的尺寸进行调整。

搜索停靠在右侧

📣 查看功能票证以分享你的反馈并继续对话。

自定义折叠文本指示器 📣

在 Visual Studio 编辑器中设置折叠文本指示器的自定义颜色。

现在,可以通过自定义折叠文本指示器的新选项进一步自定义编辑器体验:

Visual Studio 编辑器中自定义的展开和折叠文本指示器

若要试用并为每种颜色设置自定义前景颜色和背景颜色,请导航到工具 > 选项 > 环境 > 字体和颜色

“字体和颜色”页中的折叠文本指示器条目

在这里,你将找到两个可自定义的新项目:

  • 折叠文本指示器(已折叠)
  • 折叠文本指示器(已展开)

可以使用预定义的颜色或所选的自定义颜色,单独设置折叠和展开的指示器的颜色。

📣 查看功能票证以分享你的反馈并继续对话。

刷新查找结果 📣

现在,可以将结果刷新到以前的“查找”,以获取最新的搜索匹配项。

我们从很多用户那里听到,不得不重新打开“查找”窗口并重新执行搜索以获取更新结果,这很令人沮丧。 也许你只是重构了一些代码,想确认所有内容都已按预期更改,或者你拉取了一些最近的更改,需要你最近的查找操作来反映这些更新。

完成在文件中查找后,现在可以选择在窗口中刷新查找结果。 你将获得更新的结果,而无需重新搜索。

“停止查找”右侧的“刷新查找”按钮

我们还重新设计了以前的“重复查找”选项,以将其与“刷新”区分开来。 现在,它被表示为带有铅笔图标的“修改查找”。 此按钮仍将重新打开“在文件中查找”,并使用与该结果窗口相同的搜索条件。

工具栏最右侧的“修改查找”按钮

📣 查看功能票证以分享你的反馈并继续对话。

水平滚动条有更多空间 📣

现在,你可以在 CodeLens 中控制文件级指示器的可见性。

在 Visual Studio 中,带有水平滚动条的区域可能会变得非常杂乱。 我们正在通过默认关闭 CodeLens 中的文件级指示器来帮助更容易地清理它。

编辑器底部边距中的文件级 CodeLens 指示器

如果确实希望启用该选项,可以在>下找到显示文件级 CodeLens 指示器选项。 此选项会影响在底部编辑器边距(如 XAML、HTML 和 CSS)中具有文件级 CodeLens 控件的文件类型的可见性,但不会影响包含内联 CodeLens 的文件。

显示文件级 CodeLens 指示器的选项

📣 查看功能票证以分享你的反馈并继续对话。

保存时的非阻塞代码清理

在“保存”时运行代码清理时,它现在以非阻塞方式运行,以获得更流畅的编码体验。

以前,在“保存”时运行代码清理时,无法在 IDE 中执行任何操作。 现在,我们增强了此功能,以非阻塞方式运行。

清理过程将在后台运行,如果继续键入,可以自动取消,从而确保更流畅、响应更快的编码体验。

保存时清理代码

解决方案级包管理器 UI 中的可传递依赖项

在解决方案级别的 Visual Studio 包管理器 UI 中查看“已安装”选项卡时,它现在会显示直接包和可传递包。

以前,在 Visual Studio 包管理器 UI 的“已安装”选项卡上,只能看到项目的直接和可传递依赖项。 在此版本中,我们还添加了查看解决方案级别的可传递依赖项的功能。

解决方案级可传递依赖项

在解决方案资源管理器中
具有漏洞的可传递依赖项

NuGetAuditMode 设置为 all时,解决方案资源管理器将显示具有漏洞的可传递依赖项的指示器。

NuGet 审核最初是在 Visual Studio 17.8(和 .NET 8)中添加的,如果项目使用的任何包存在已知漏洞,它将在还原过程中提供警告。

有关 NuGet 审核(包括所有配置选项)的详细信息,请参阅 NuGet 审核文档。

这些漏洞可以位于直接依赖项以及可传递依赖项(依赖项依赖的包)中。 现在,如果将 NuGetAuditMode 设置为 all,解决方案资源管理器不仅会显示直接指示器,还会显示具有漏洞的可传递依赖项的指示器。

解决方案资源管理器中的 可传递依赖项漏洞

GitHub Copilot

询问 GitHub 更多问题

在 GitHub 中搜索,直接从 Visual Studio 查找提交、问题、拉取请求、存储库和主题。

现在,可以使用 GitHub Copilot 聊天跨 GitHub 进行搜索,以查找提交、问题、拉取请求、存储库和主题。

可以提出如下问题:

  • @github 分配给我的所有开放 PR 是什么?
  • @github 分配给我的最新问题是什么?
  • @github 最新版本什么时候?
  • @github 显示最近合并的 PR @davidfowl

新的 GitHub 技能

此功能适用于所有 GitHub Copilot 用户。 在 GitHub Copilot 文档中详细了解 可用的 GitHub 技能

重要

若要使用此功能,请确保激活 GitHub Copilot


GitHub Copilot 的自定义说明

创建一个文件,该文件会自动将信息添加到你向 GitHub Copilot Chat 提出的所有问题。

借助 GitHub Copilot,只需提供上下文即可接收针对团队工作流、首选工具和项目细节定制的聊天响应。 可以创建一个自动提供此信息的文件,而不是将此上下文详细信息添加到每个聊天查询。 虽然此附加上下文不会显示在聊天中,但它可供 GitHub Copilot 使用,从而生成更准确的相关响应。

GitHub Copilot 自定义说明

如何启用自定义说明
  1. 通过工具选项启用该功能 GitHub > Copilot> 并检查>中。>
  2. 在 .github 文件中存储库的根目录中添加 copilot-instruction.md ,如果该文件尚不存在,请创建该文件。

GitHub Copilot 启用自定义说明

在此处了解有关创建自定义说明 的详细信息

重要

若要使用此功能,请确保激活 GitHub Copilot


GitHub Copilot Chat 中的模型选择

GitHub Copilot 现在允许你选取模型。

OpenAI o1-preview 和 o1-mini 现在可供 Visual Studio 中的 GitHub Copilot Chat 中的所有用户使用。

现在,可以使用 o1-preview、o1-mini 或默认 GPT-4o 模型为 GitHub Copilot Chat 提供支持,从而尝试这些模型。 借助可用的模型切换,可以无缝地从解释 API 或生成基本代码转向创建复杂的算法或调试逻辑错误。

请访问 GitHub Changelog,了解有关此功能的详细信息。

重要

若要使用此功能,请确保激活 GitHub Copilot


增强上下文理解

GitHub Copilot 中的增强上下文理解提供了更精确的响应。

GitHub Copilot 中的增强上下文理解

GitHub Copilot 现在提供增强的上下文理解,以提供更精确的响应。 通过此更新,GitHub Copilot 可以在代码中直观地解释关键特征,根据项目的独特需求定制建议。 这种更智能的代码协助方法旨在帮助你更高效地工作,而无需频繁的上下文调整。

立即通过 GitHub Copilot 试用!

重要

若要使用此功能,请确保激活 GitHub Copilot


内容排除更新

内容排除现在支持子模块和嵌套存储库。

我们增强了系统如何处理子模块和嵌套存储库,使你更轻松地处理复杂的项目结构。

此外,我们还添加了对非 Git 存储库的支持,扩大了工作流的灵活性,并允许无缝集成更广泛的项目。

重要

若要使用此功能,请确保激活 GitHub Copilot


AI 智能变量检测

通过集成 AI 变量检测优化调试工作流程。

在 Visual Studio 中使用 Ask GitHub Copilot,检查和分析本地、自动和数据提示中的值从未如此简单。 只需右键单击任何值,即可获得有关错误、意外结果或异常的详细 AI 驱动见解,而无需离开 IDE。

AI 变量查找

每当出现意外值时,此功能都将在 IDE 中实时分析变量,从而显著提高故障排除速度。

重要

若要使用此功能,请确保激活 GitHub Copilot


AI 支持的 IEnumerable 可视化工具

IEnumerable 可视化工具中的 AI 驱动的 LINQ 可编辑表达式。

我们在 AI 帮助下增强了 IEnumerable 可视化工具中的可编辑表达式功能。 新的 Ask Copilot 功能允许用户直接在可编辑的表达式文本框中利用 AI 来创建复杂的 LINQ 表达式。

AI 可编辑表达式 IEnumerable 可视化工具

若要访问 GitHub Copilot 聊天,只需单击位于可编辑表达式部分右下角的 GitHub Copilot 图标。 在聊天中,你将找到示例 LINQ 语法示例。 此外,还可以使用自然语言描述查询,GitHub Copilot 将生成相应的 LINQ 查询。 若要将 LINQ 查询筛选应用于可视化工具,请在聊天中使用在可视化工具中显示按钮。

它提供即时反馈和指导,使创建复杂筛选器和转换的过程更加直观高效。

重要

若要使用此功能,请确保激活 GitHub Copilot


使用 GitHub Copilot 调试测试

通过 GitHub Copilot 使用调试测试获取有关调试失败测试的帮助。

需要帮助调试失败的单元测试。 现在,GitHub Copilot 可以通过为你提供调试计划并指导你调试失败的测试来提供帮助,通过单击测试资源管理器中的使用 Copilot 调试按钮,使你更接近通过测试。

使用 GitHub Copilot 进行调试

启动该功能后,GitHub Copilot 将为你提供调试计划,设置适当的断点并监视变量,然后启动调试会话。 当它到达断点时,它会向 GitHub Copilot 提供所监视变量的值,并确定你的下一步,继续调试或修复问题代码。 你可以继续此对话,直到你通过测试为止。

GitHub Copilot Chat 与调试计划和后续步骤

重要

若要使用此功能,请确保激活 GitHub Copilot


使用 GitHub Copilot 修复代码 📣

GitHub Copilot 有助于解决代码问题。

GitHub Copilot 现已集成到灯泡和错误列表中,为你提供了代码问题的快速修复和见解说明。 无论是用 C# 还是 C++ 开发,此功能都可以帮助你更高效地了解和解决代码库中的问题。

若要开始,只需调用灯泡并选择“使用 Copilot 修复”。 这将启动与 GitHub Copilot 的内联聊天,从而提供可用的修复。

使用灯泡中的 GitHub Copilot 修复代码

还可以从错误列表中选择 GitHub Copilot 图标以打开聊天面板,可在其中找到有关当前错误的详细说明和解决方案。

使用错误列表中的 GitHub Copilot 修复代码

利用 LLM,GitHub Copilot 可以直接在灯泡和错误列表中提供有用的解释和修复,从而增强编码体验。

📣 查看功能票证以分享你的反馈并继续对话。

重要

若要使用此功能,请确保激活 GitHub Copilot


更好的 C# AI 补全

GitHub Copilot 可从相关源文件中引入额外的上下文,以改进 C# 的完成。

GitHub Copilot 代码完成在编码时内联提供自动完成建议。 这些建议基于当前活动文件的内容以及编辑器中任何其他打开的文件生成。 但是,我们发现,合并更相关的上下文可显著提高这些建议。

为了增强 C# 开发人员的体验,我们更新了 GitHub Copilot 以包含其他 C# 上下文,例如完成时可用的类型和方法。

使用最新版本的 Visual Studio,GitHub Copilot 现在会自动考虑其他上下文的语义相关文件,即使这些文件未在编辑器中打开也是如此。 这种改进有助于减少幻觉,同时提供更相关的准确建议。

之前:语义相关的文件不被视为 GitHub Copilot 完成的上下文

语义相关的文件不被视为 GitHub Copilot 完成的上下文

之后:语义相关的文件被视为 GitHub Copilot 完成的上下文

语义相关的文件被视为 GitHub Copilot 完成的上下文

重要

若要使用此功能,请确保激活 GitHub Copilot


GitHub Copilot 中的引用代码

在 GitHub Copilot 中引入代码引用,让你能够允许包含公共代码匹配的代码建议,同时接收有关匹配的详细信息。

我们很高兴地宣布,Visual Studio 中的 GitHub Copilot 现已提供代码引用!

引用公共代码的示例

这项新功能可在 GitHub Copilot 建议与公开代码匹配时通知开发人员,从而为开发人员提供透明度。 现在,你可以看到匹配的代码、源文件和任何相关的许可信息,帮助他们在编码时做出更明智的决定。

通过代码引用,你可以阻止或允许包含公共代码匹配的建议,从而加强控制和自定义。

通过在 GitHub Copilot 中集成代码引用,我们促进了知识共享,提高了透明度,并让你能够放心地进行创建。 无论你是个人开发者还是大型团队的一员,这项功能都能增强工作流,帮助你轻松驾驭复杂的公共代码。

立即试用 Visual Studio 中的 GitHub Copilot,以更高的透明度和信心控制自己的开发流程!

重要

若要使用此功能,请确保激活 GitHub Copilot


GitHub Copilot 中的引导式聊天

引入一种更具对话氛围的新 GitHub Copilot 聊天方式。

我们引入了一种更具对话氛围的新 GitHub Copilot Chat 互动方式!

引导式聊天体验示例

我们引入了一种更具互动性和对话氛围的 GitHub Copilot 聊天使用方式。 现在,GitHub Copilot 会在不清楚上下文的情况下引导你加以阐明,从而确保带来更准确、更有帮助的回答,而不是让你感到困惑或不确定。

这种引导式聊天体验有助于完善你的询问,提供建议,并确保更顺畅、更富有成效的互动。 通过这种新的聊天形式,你将体验到更智能、更直观的 GitHub Copilot,在你编码时满足各种需求。

立即尝试新的引导式聊天体验,看看它有何不同!

重要

若要使用此功能,请确保激活 GitHub Copilot


GitHub Copilot 载入

在 GitHub Copilot Chat 中更快地开始!

开始使用 GitHub Copilot 聊天时需要帮助吗? 我们引入了两个新的加入功能,可帮助你更快地入门。

初学者提示

单击其中一个初学者提示,向 GitHub Copilot 发送第一条消息! 使用这些提示查看 GitHub Copilot 在工作流中为你提供的功能。

GitHub Copilot 新手提示

提示库

如果需要再次引用一些预先创建的提示,请单击“ 提示库 ”按钮(书籍图标)以查看所有提示的列表。 此库包含常用的提示,只需单击一下即可!

GitHub Copilot promptlibrary

无论是在探索新的编码任务,还是在寻找灵感,我们的提示都能帮助你深入学习并开始充分利用 GitHub Copilot Chat。

试一试,看看它能带给你什么!

重要

若要使用此功能,请确保激活 GitHub Copilot


.NET

使用 .NET 9 实现更多功能 📣

.NET 9 提升了云原生和智能应用开发,专注于提高生产力、简化部署和加速 AI 集成。

.NET 9 提升了云原生和智能应用开发,专注于提高生产力、简化部署和加速 AI 集成,确保开发人员在各种应用程序中获得卓越的性能。 在 Visual Studio 17.12 中完全支持 .NET 9 后,可以轻松利用所有最新改进。 有关新增功能的详细信息,请访问 .NET 9 中的新增功能

.NET 9

此外,你会发现围绕 IDE 的功能的更新,使 .NET 和 ASP.NET 比以往更高效。

📣 查看功能票证以分享你的反馈并继续对话。


禁止显示 Visual Studio 中遵循的特定 GitHub 公告的警告

NuGet 允许在 Visual Studio 中禁止显示特定 GitHub 公告和抑制警告。

NuGet 审核在项目中使用的包存在已知漏洞时提供警告。 始终建议升级到新版本的包,但如果升级是不可能的,并且确信软件没有风险,可以通过将 NuGetAuditSuppress 项添加到项目文件来禁止显示特定 GitHub 公告的警告。

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <NuGetAuditSuppress Include="https://github.com/advisories/GHA1234" />
  </ItemGroup>
</Project>

将 nuget.org 配置为审核源

现在,即使使用其他 NuGet 源,也可以将 nuget.org 设置为审核源以获取漏洞信息。

NuGet 审核需要提供漏洞数据库的包源。 nuget.org 提供 GitHub 公告数据库中的漏洞信息。

从 Visual Studio 17.12 开始,现在可以在 NuGet.Config 文件中指定审核源,因此不再需要将 nuget.org 用作包源。

如果不将 nuget.org 用作包源,并且希望在还原期间使用 NuGet 审核来报告易受攻击的包,请将以下内容添加到解决方案目录中的 NuGet.Config 文件中:

<confiuration>
  <!-- any existing config, including <packageSources> -->
  <auditSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
  </auditSources>
</configuration>

调试和诊断

Blazor WebAssembly 调试 📣

面向 .NET 9 或更高版本的 Blazor WebAssembly 应用的改进调试体验。

Visual Studio 现在提供了面向 .NET 9 或更高版本的 Blazor WebAssembly 应用的改进调试体验:

  • 调试程序中显示的数据类型现在与预期的 .NET 数据类型匹配。
  • 类型成员和成员可见性使用预期的图标。
  • 显示的调用堆栈将被清理,只显示 .NET 调用堆栈,并正确遵循“仅我的代码”设置。
  • 现在支持模块窗口。
  • “即时”窗口中的表达式计算支持以及对监视和条件断点的支持得到扩展和改进。

Blazor 调试改进

若要启用新的预览调试体验,请执行以下操作:

  • 启用启用新的 .NET 9+ Mono 调试器设置。
  • 安装最新的 .NET 9 SDK。
  • 将 Blazor 应用更新为面向 .NET 9。

📣 查看功能票证以分享你的反馈并继续对话。

探查器中的计量直方图

使用探查器计数器工具中的计量直方图来增强性能见解。

Visual Studio 性能分析套件的最新增强功能引入了计量直方图功能。 此工具允许识别和分析直方图工具生成的直方图数据。 记录来自这些仪器的数据时,将可视化直方图结果,从而提供了数据分布的清晰表示。

计量直方图计数器工具

此外,泳道图提供了一个详细的、分段的性能指标视图,增强了你有效查明和解决性能问题的能力。

显示方法返回值 📣

现在,调试器会在 AI 的辅助下显示内联返回值,以提高效率。

Visual Studio 调试器现在显示返回语句的内联值,以响应开发人员社区请求最多的功能之一。

通过此增强功能,可以直接在代码中查看函数返回的确切值,而无需其他代码或临时变量来检查返回值。

内联返回值

借助 GitHub Copilot,你可以在悬停状态下使用 询问 Copilot 选项直接在 Visual Studio 中进一步分析返回值,以便立即解决问题。

本机代码和托管代码都支持它。

📣 查看功能票证以分享你的反馈并继续对话。

轻松导出断点组 📣

轻松导入和导出断点组。

Visual Studio 断点组现在支持使用导入和导出功能,让你可以在多个项目或环境中轻松管理和维护断点结构。

断点组导出导入

通过这项新功能,你可以导出断点组及其配置,然后将其导入不同的解决方案,从而确保调试设置的一致性,而无需再次手动重新创建断点组。

📣 查看功能票证以分享你的反馈并继续对话。

适用于 IEnumerable 可视化工具的 IntelliSense 📣

增强的 IEnumerable 可视化工具带有 IntelliSense,可加快 LINQ 查询速度。

通过 IntelliSense,IEnumerable Visualizer 得到了增强,可提供实时代码建议和自动完成功能,从而使 LINQ 表达式的编写更快、更准确。

IEnumerable 可视化工具 IntelliSense

这一改进通过提供智能代码建议简化了生成和编辑查询的过程,从而降低了出错的可能性,并加快了开发时间。

📣 查看功能票证以分享你的反馈并继续对话。

分析一段时间内的内存使用情况

使用“诊断工具”窗口选择并比较两个内存快照。

“诊断工具”窗口现在支持比较内存快照,以便更轻松地分析一段时间内的内存更改。

若要使用此功能,请确保在“诊断工具”窗口中的“内存”选项卡下至少捕获了两个内存快照。

选择用于比较的快照
  • 按住 Ctrl 键并单击快照行以选择任意两个快照。
  • 或者,按住 Shift 键并使用 up/down 箭头键选择两个连续快照。
取消选择快照
  • 按住 Ctrl 键并单击要取消选择的快照。
查看差异

选择内存快照进行比较后,单击快照列表上方的“查看差异”按钮,以查看它们之间的差异。

查看差异快照 MMA

Git 工具

使用 Git 管理文件重命名 📣

使用新通知重命名文件时,你可以安心。

从解决方案资源管理器重命名文件时,系统会提醒你暂存更改,以便在 Git 中查看重命名。 这增强了你的信心,即 Git 能够识别你的文件更改并正确跟踪它。 我们发现这对许多客户来说是一个困惑点,因此我们与开发人员社区的人员合作,制作了一个新的通知。

Git mv 通知

📣 查看功能票证以分享你的反馈并继续对话。

拉取请求草稿和模板 📣

创建拉取请求草稿并使用 Visual Studio 中的模板开始进行描述。

现在可以创建拉取请求草稿并使用 Visual Studio 中的 GitHub 模板开始描述。 这是创建拉取请求体验的两个首要请求。

起草 PR

使用“创建”按钮上的下拉菜单来“创建为草稿”。

创建拉取请求草稿选项

PR 模板

为 GitHub 和 Azure DevOps 创建新 PR 时,将使用默认 PR 模板。 在 GitHub 文档Azure DevOps 文档中详细了解如何将 PR 模板添加到存储库。

📣 查看功能票证以分享你的反馈并继续对话。参与这项调查,以帮助完善此功能。

创建内部 GitHub 存储库 📣

Visual Studio 现在支持创建内部存储库,并为每种类型的存储库提供了指导,让你在启动新项目时更有信心。

Visual Studio 现在支持 GitHub 组织的内部存储库。 我们还为每种类型的存储库提供了指导,以便根据你使用的帐户更清楚地了解新项目的可见性。

“新建存储库”对话框

📣 查看功能票证以分享你的反馈并继续对话。

复制 Git 链接 📣

你可以获得指向特定代码行的 GitHub 或 Azure DevOps 链接,以便与同事轻松共享。

每当你与同事共享几行代码时,他们从你的存储库中获取额外的上下文通常会很有用。 但是,如果他们正在处理其他内容,可能需要太长的时间,并干扰他们的工作。

现在,你可以在编辑器中突出显示要共享的代码,右键单击打开上下文菜单,然后在 Git 子菜单下获得指向 GitHub 或 Azure DevOps 中代码的可共享链接。 这使得协作变得简单易行,并使 IDE 和网络上的远程存储库之间的流动更加顺畅。

复制 git URL 上下文菜单

还可以直接从提交历史记录中获取可共享链接。 这样可以毫不费力地引用当前未签出的代码。

在 Git 存储库窗口中复制 git url

📣 查看功能票证以分享你的反馈并继续对话。

Git 多存储库支持 📣

现在,你可以在 GitHub 和 Azure DevOps 的多存储库方案中创建拉取请求和链接工作项。

现在可以在多存储库方案中创建拉取请求和链接工作项。 对于 GitHub 和 Azure DevOps,使用存储库选取器专注于多存储库方案中的特定存储库时,我们支持集成。

存储库选取器

📣 查看功能票证以分享你的反馈并继续对话。

自定义 AI Git 提交消息 📣

可以在 GitHub Copilot 生成 Git 提交信息的提示中添加其他说明。

现在,你可以在 GitHub Copilot 生成 Git 提交信息的提示中添加其他说明。 这样就可以自定义提交信息,使其更符合工作流程和团队的标准。 可以指定要生成的行数、行的长度,甚至提供提交样式示例。 在工具>选项 GitHub > Copilot > 源代码管理集成>提示字段中编辑消息。

自定义 Git 消息

📣 查看功能票证以分享你的反馈并继续对话。

IDE

多项目启动配置 📣

通过在多项目解决方案中设置和保存特定项目的启动配置文件来简化调试。 毫不费力地与团队共享配置。

多项目启动配置功能允许你设置和保存配置文件,以便在预定义状态下启动多项目解决方案中的特定项目以进行调试。

多项目启动配置

这简化了使用复杂解决方案的过程,提高了调试效率,并可以轻松地在团队成员之间共享配置。

📣 查看功能票证以分享你的反馈并继续对话。

注意

必须在“工具 -> 管理预览功能”下启用此功能


MotW 安全警告

Web 标记 (MotW) 安全警告现在已集成到整体信任功能中。

当 Visual Studio 检测到你试图打开标记有 Web 标记 (MotW) 标识符的内容时,将显示安全警告。

这种与信任相关的新警告传达了从 Internet 下载等潜在不安全来源打开内容的风险。

信任对话框,提醒在 Visual Studio 中打开 Web 下载的安全风险

可以通过转到>下的信任设置来修改默认信任体验。

信任设置允许自定义默认信任体验

Teams 工具包新的 AI 模板

Teams 工具包可载入新的 AI Teams 应用程序模板。

Teams 工具包添加了三个新的 Teams AI 应用模板:

它们是:

Teams AI 应用模板

  1. 基本 AI 聊天机器人 - 在使用 Teams AI 库构建的 Microsoft Teams 中自己的 copilot

  2. 与你的数据聊天 - 一个智能聊天机器人模板,其中包含来自自定义数据源的域知识。

    Teams 工具包现在使你能够创建自定义 Copilot,这是一个 AI 支持的聊天机器人,具有 RAG 功能,可以理解自然语言并检索域数据来回答特定于域的问题。 此模板支持访问自定义 Copilot 应用中的自定义数据。

    选择此模板时,可以选择两种方法来连接数据:

    a. Azure AI 搜索:聊天机器人可以访问 Azure AI 搜索服务上的数据,并将其用于与用户聊天。

    b. 自定义数据源:可以向自定义 Copilot 应用添加所需的任何数据源,例如文件系统或向量 DB。

  3. AI 代理 - Teams 中的 AI 代理,可以根据 LLM 推理做出决策和执行操作。

请尝试新的 AI 应用模板,在 Teams 中启动 AI 之旅!

在实例之间复制文件 📣

现在可以将 Visual Studio 一个实例中的解决方案资源管理器里的文件和文件夹复制到另一个实例中。

我们很高兴能在 Visual Studio 中引入一项备受欢迎的功能! 现在可以使用解决方案资源管理器在不同的 Visual Studio 实例之间无缝复制和粘贴代码文件和文件夹。 只需选择所需的文件或文件夹,使用 Ctrl+CCtrl+X 切换到另一个 Visual Studio 实例,然后使用 Ctrl+V 将这些文件或文件夹包含到新解决方案中。 所有更改都将准确反映在文件系统中。

除了复制和粘贴,还可以将文件和文件夹从 Visual Studio 的一个实例拖放到另一个实例中。

在 Visual Studio 实例之间复制文件

以前,这一功能只适用于少数项目类型,但现在我们已将其扩展到 Visual Studio 中的所有主要项目类型。

📣 查看功能票证以分享你的反馈并继续对话。

Azure 应用程序服务发布安全更新

使用集成安全更新安全地发布到 Azure 应用程序服务。

Azure 应用程序服务的发布指南建议客户禁用基本身份验证并通过集成身份验证启用发布。

Azure 工具安全发布

Visual Studio 2022 中的新功能禁用了基本身份验证,并启用了发布到 Azure 应用程序服务的集成安全性。 这可确保安全地处理凭据发布,从而降低与基本身份验证相关的风险。

当发布到已启用基本身份验证的 Azure 应用程序服务时(不建议这样做),用户将看到“开启基本身份验证”选项,默认情况下该选项未被选中。 需要保留“基本身份验证”的客户可以选中该复选框,但鉴于建议是禁用“基本身份验证”,因此默认情况下不会选中该复选框。 因此,如果这是第一次发布,则会开始安全保护;或者,一旦在更新 Visual Studio 后完成发布过程,则会获得安全保护。

Azure 工具安全发布已禁用

如果最近通过门户或 Visual Studio 的此版本或任何未来版本创建了 Web 应用,那么基本身份验证将默认被禁用。 对于任何已禁用基本身份验证的 Web 应用,我们会通过完全禁用复选框来避免无意中降低网络应用程序的安全性,从而保证安全。

Azure 工具安全发布已启用

Azure WebJobs Linux 支持 📣

现在,Visual Studio 中的右键单击发布功能支持在 Linux 上发布到 Azure WebJobs。

Azure WebJobs Linux 支持跨平台 .NET 5.0+ 控制台应用,现在,也可以右键单击将代码从 Visual Studio 发布到 Linux 上的 Azure WebJobs。

显示 Linux 目标的“发布”对话框

📣 查看功能票证以分享你的反馈并继续对话。

Azure Functions Flex Consumption

发布到 Azure Flex Consumption 托管计划,目前为预览版。

如果尝试新的 Azure Functions Flex Consumption 托管计划(目前为预览版),则可以右键单击“从 Visual Studio 发布到 Flex”。

Flex Consumption 将进一步扩展应用的功能,并提供以下内容:

  • 虚拟网络集成,无需额外费用
  • 通过实例大小选择和每个实例的并发控制进行快速且可预测的缩放
  • 无服务器,缩放为零,只需在实例处于活动状态时为其付费
  • 使用可选始终就绪实例功能的冷启动缓解

公告博客文章或文档中详细了解 Flex Consumption,并试用我们的其中一个示例

Azure Functions Flex Consumption 发布

连接服务安全更新

使应用和开发体验更安全。

在此项连接的服务的更新中,现在可以将项目代码连接到 Azure 资源(如 Azure 存储),而无需在代码或配置中使用机密或连接字符串。

现在,你将为连接命名,终结点将永久保存到配置中,而不是保存到完整的连接字符串中。 这意味着磁盘上的机密会更少,因此默认情况下,开发将更安全,并且会减少在将机密提交到源代码管理时的错误。

“连接到 Azure 存储”对话框

我们还使用最新的 Azure SDK,因此你在使用 Visual Studio(或 Azure CLI)登录名连接到 Azure 资源时会获得支持,但通过连接字符串进行连接时则无法获得支持。 在本地运行时,代码将使用登录凭据访问资源。 在 Azure 中运行时,Azure SDK 将使用应用程序服务的托管标识来访问资源。

连接的服务会为你完成所有设置,并注入适当的代码以使用集成标识而不是机密。 发布期间,应用将配置访问资源所需的相应标识和角色。

桌面

改进了 .NET 9 上的 UWP 应用的 MSIX 工具 📣

Visual Studio 现在引用新的独立单项目 MSIX 工具,用于在 .NET 9 上打包 UWP 应用。

在对 .NET 9 的 UWP 支持的初始预览版 中,我们依赖于 WindowsAppSDK 提供 MSIX 工具,以使用单个项目配置(而不是使用 Windows 应用程序打包项目(即 .wapproj 文件)打包应用。 这样做引入了几个问题,主要一个问题是,即使不需要,WindowsAppSDK 中的 WebView2 可传递依赖项也会自动添加到所有 UWP 应用。

我们现在已完全分离单个项目 MSIX 工具,并将其发布为新的独立 NuGet 包: Microsoft.Windows.SDK.BuildTools.MSIX。 这包括在 .NET 9 上生成、部署和运行 UWP 应用所需的所有内容,以及生成要在 Microsoft 应用商店或旁加载中发布的 MSIX 包。 Visual Studio 中的 .NET 9 工具上的 UWP 会在需要时自动添加这两个包引用:

MSIX 工具

这两者都完全删除了 WebView2 可传递依赖项,并且当未在 .csproj 文件中手动设置 WindowsSdkPackageVersion 属性时,以前预览版本中的新项目存在的生成错误。 通过此更改,新项目将仅生成并运行,而无需进行任何其他更改!

📣 查看功能票证以分享你的反馈并继续对话。

增强的 WinUI 组件搜索

通过改进的 Visual Studio 安装程序搜索增强 WinUI 项目设置,简化开发人员的组件位置。

使用最新的 Visual Studio 安装程序更新,进一步简化 WinUI 项目设置! 开发人员现在可以快速找到与 WinUI 相关的组件,从而消除了之前在空搜索结果中导航的挫折感。 此增强功能简化了开发环境配置,提供了更直观、更高效的用户体验。

显示在 Visual Studio 安装程序中对 WinUI 单个组件的新搜索的图像

打开 Visual Studio 安装程序,转到“单个组件”选项卡,并搜索 WinUI 相关的关键字(WinUI、WinRT)!

针对 UWP 的 .NET 9 SDK 支持 📣

Visual Studio 现在包含了 UWP 开箱即用支持的 .NET 9 SDK。

初始预览版中试用 .NET 9 上的 UWP 的必要步骤之一是安装 .NET 9 SDK 的每日生成版本。 新版 Visual Studio 发布后,就不再需要这一步了。

Visual Studio 现在包含 .NET 9 SDK,其中包含 .NET 9 对 UWP 的所有新支持(特别是引用 UWP XAML 投影的逻辑,以及将 CsWinRT 配置为 UWP XAML 应用的项目类型)。 现在,可以使用随 Visual Studio 自动安装的 .NET SDK 在 .NET 9 项目上生成和运行 UWP。

📣 查看功能票证以分享你的反馈并继续对话。

适用于 UWP 的简化 .csproj 📣

对于 .NET 9 上的现代 UWP 项目,Visual Studio 现在会自动设置 UseUwpTools。

使用 .NET 9 的 UWP 应用程序和库在其 .csproj 文件中需要两个属性:UseUwp 用于为 UWP XAML 应用配置 .NET SDK,UseUwpTools 用于启用 Visual Studio 中的所有新工具来生成和运行 UWP XAML 应用。

现在,当设置 UseUwpTools 时,Visual Studio 会自动设置 UseUwp 属性,以便在常见方案中让 .csproj 变得更简洁。 对于高级方案,仍然可以通过手动禁用 UseUwpTools 来选择退出。

📣 查看功能票证以分享你的反馈并继续对话。

修复了 .NET 9 中 UWP 的 RID 📣

.NET 9 类库上的 UWP 可以正确地将 RID 设置为本地 AOT 的正确值。

我们修复了 .NET 9 上 UWP 类库(和 WinRT 组件)的 APPX 工具中的一个错误,该错误默认在 .NET Native 上应用了 UWP 的运行时标识符(即使用 win10- 前缀,并包括不再支持的平台,如 arm)。

现在,APPX 工具将默认为 .NET 9 项目设置正确的 RID:win-x86;win-x64;win-arm64 如果需要,还可以手动指定。

📣 查看功能票证以分享你的反馈并继续对话。

修复了 UWP 项目创建 📣

我们修复了在 .NET 9 项目上创建新 UWP 时导致不再显示错误对话框的通用模板向导。

如果正在使用预览版 VSIX 和 .NET 9 上的 UWP 新项目模板,则可能会注意到在创建新项目时会出现一个错误对话框。 这在创建新解决方案时尤其麻烦,因为 Visual Studio 在创建项目后无法正确打开解决方案。 这一问题现已解决,在 .NET 9 上创建以 UWP 为目标的新项目现在可以正常运行。

📣 查看功能票证以分享你的反馈并继续对话。

Web

HTTP 文件中的请求变量 📣

HTTP 文件现在支持请求变量。 在这里,你可以发送请求,然后在将来的请求中使用来自响应或请求的数据。

处理 HTTP 文件时,一种常见的情况是调用终结点并从响应中获取值,然后发送后续请求。 例如,可以调用终结点对用户进行身份验证,然后在以后的调用中传递从登录终结点返回的令牌。 在此版本之前,无法在 Visual Studio 中执行此操作。 在下面的代码片段中,可以看到一个示例,说明如何在 HTTP 文件中工作。

# @name login
POST {{TodoApi_HostAddress}}/users/token
Content-Type: application/json

{
  "username": "{{myusername}}",
  "password": "{{mypassword}}"
}

###

GET {{TodoApi_HostAddress}}/todos
Authorization: Bearer {{login.response.body.$.token}}

###

在上面的代码片段中,有两个请求,即第一个调用 /users/token 终结点以对用户进行身份验证。 在请求行的正上方,您将看到注释 # @name login。 该语法为请求提供了一个名称(在本例中为 login),并将其配置为请求变量。 发送请求时,可以在从该 HTTP 文件发送的任何将来请求中访问响应或请求的值。 由于这是一个登录请求,因此应小心保护机密。 在 Visual Studio 中,我们支持以安全的方式访问机密。 有关处理机密的详细信息,请参阅文档的此部分

第二个请求调用经过身份验证的终结点 /todos,该终结点将返回该用户的 todo 项。 在请求中,令牌作为带有行的标头传入。

Authorization: Bearer {{login.response.body.$.token}}

/users/token 终结点以 JSON 形式返回响应。 在响应正文中,使用 JSON Path 表达式 $.token 提取令牌。 如果使用的是返回 XML 的终结点,则可以传入 XPath 表达式,而不是 JSON Path 表达式。 Visual Studio 中的支持受到了 Visual Studio Code 可用的 REST 客户端的现有 OSS 扩展的启发。 您可以在此处了解有关请求变量的更多信息。 我们将很快添加文档,以更详细地讨论此支持。

📣 查看功能票证以分享你的反馈并继续对话。

JavaScript 和 TypeScript 中的 Vitest 支持 📣

使用 JavaScript 和 TypeScript 项目时,现在可以使用 Vitest 创作测试用例。

在扩展名为 .esproj 的 JavaScript 和 TypeScript 项目 (JSTS) 中,我们添加了对发现和运行用 Vitest 编写的测试的支持。 若要开始使用 Vitest 测试,请在 JSTS 项目中,使用解决方案资源管理器中的 npm 添加 vitest 包,然后修改项目文件以声明以下属性。

    <JavaScriptTestRoot>test\</JavaScriptTestRoot>
    <JavaScriptTestFramework>Vitest</JavaScriptTestFramework>

确保 JavaScriptTestRoot 的值与测试文件所在的位置具有正确的相对路径。

将测试添加到正确的文件夹,并生成项目/解决方案。 之后,应会在测试资源管理器中看到测试用例。

使用 vitest 测试的测试资源管理器

在测试资源管理器中,可以看到发现并执行测试用例的不同测试用例。

我们尚未添加对调试的支持,但我们将很快添加该支持。 另一个已知问题是,在测试资源管理器中双击测试用例时,它会将你带到定义了测试用例的文件的第一行。 我们也将改善这种体验。

📣 查看功能票证以分享你的反馈并继续对话。

对更多语言的嵌入提示 📣

JavaScript、TypeScript、Python 和 Razor 都添加了嵌入提示支持,以及用于控制其行为的设置。

嵌入提示显示有关内联呈现的源代码的其他信息。 这通常用于在编辑器中直接显示从代码中推断出的类型、参数名称和其他隐式信息。

我们添加了对 JavaScript、TypeScript、Razor 和 Python 中显示嵌入提示的支持。 我们还添加了一个新设置,以便你可以自定义这些语言中的提示行为。 此设置尚不适用于 C# 和 C++。 要为这些语言启用嵌入提示,您可以使用工具 > 选项 > 文本编辑器 > 所有语言 > 嵌入提示中的新设置。 可以在下图中看到新选项。

嵌入提示全局设置

嵌入提示有三个不同的值。

  • 始终:始终显示嵌入提示。
  • 在按 Alt+F1 时:仅在按 AltF1 时显示嵌入提示。 这是默认值。
  • 从不:从不显示嵌入提示。

对于 JavaScript 和 TypeScript,有一个额外的选项页面来配置嵌入提示的行为。 这可以在工具 > 选项 > 文本编辑器 > JavaScript/TypeScript > 高级 > 常规中找到。

这些选项如下图所示。

嵌入提示全局 TypeScript 设置

默认情况下,所有这些选项都被禁用,你应该为 JavaScript 和 TypeScript 文件启用感兴趣的提示。 在未来的更新中,我们可能会更改这些选项的默认值。 在下图中,可以看到一个显示嵌入提示的 JavaScript 文件。

嵌入提示

在上一张图片中,显示的嵌入提示是带有 : number 的灰色框,用于指示变量的类型。

📣 查看功能票证以分享你的反馈并继续对话。

HTTP 文件共享环境 📣

在 HTTP 环境文件中,我们添加了跨环境共享变量的支持。

在 Visual Studio 中使用 HTTP 文件时,可以定义 环境,以便为 API 测试创建不同的设置。 以前,无法跨这些环境共享变量。 我们在环境文件中添加了对新条目 $shared 的支持,使你可以定义在所有环境中可用的变量的默认值。

例如,请考虑以下环境文件 (http-client.env.json)。

{
    "$shared": {
        "HostAddress": "https://localhost:7293"
    },
    "dev": {
        "username": "sayedha"
    },
    "dev2": {
        "username": "madsk"
    },
    "staging": {
        "username": "staginuser",
        "HostAddress": "https://sayedrest.example.com"
    }
}

我们在上面的 $shared 中定义了共享值,它由设置为 HostAddresslocalhost:7293 变量组成。

在定义的三个环境中,开发环境都没有指定 HostAddress 的值,但暂存具有值。

使用 devdev2 环境时,HostAddress 的值将来自 $shared,因为这些环境没有 HostAddress 的值。 使用过渡环境时,HostAddress 的值将设置为 https://sayedrest.example.com

📣 查看功能票证以分享你的反馈并继续对话。

Data

SSDT 中 SDK 样式的 SQL 项目 📣

现在,可以在 SQL Server Data Tools 项目中使用 SDK 样式的项目文件格式。

此更新基于 Microsoft.Build.Sql SDK 添加 SQL 项目,该 SDK 为 SQL Server Data Tools (SSDT) 项目带来了跨平台支持和改进的包引用。 通过减少冗长的项目文件和对 NuGet 包的数据库引用,团队可以在单个项目中更有效地在大型数据库上进行协作,或者从多个项目中编译多组对象。

解决方案资源管理器中 SDK 样式 SQL 项目

Microsoft.Build.Sql 项目中的数据库部署可以在 windows 和 Linux 环境中自动执行,其中 Microsoft.SqlPackage dotnet 工具从 SQL 项目发布生成项目 (.dacpac)。 深入了解 SDK 样式 SQL 项目和适用于 SQL 的 DevOps 的预览版。

Microsoft.Build.Sql 项目 SDK 是开源的,并在 GitHub 上开发。

请确保在 Visual Studio 安装程序中安装最新的 SSDT 预览组件,以在解决方案中使用 SDK 样式的 SQL 项目。

安装程序启用预览版 SSDT 功能

📣 查看功能票证以分享你的反馈并继续对话。

C++

设置 C++ 命令行参数

一种从工具栏设置命令行参数的新方法。

使用新的“设置参数”工具栏项快速设置 C++ 项目的命令行参数。 此组合框允许你直接从工具栏设置命令行参数,以便你可以快速更改参数。 运行项目时,将传递在框中输入的任何参数。

如果使用安装了使用 C++ 进行游戏开发工作负载,则默认情况下会显示此工具栏组件。 如果没有看到该组件,可以通过右键单击工具栏并选择“设置参数”来添加它。

注意:此功能目前仅适用于 Unreal Engine 项目。 将来的版本将支持常规 C++ 项目。

设置 C++ 命令行参数

Build Insight 视图说明

了解如何通过新添加的文档链接使用 Build Insights 的每个选项卡。

现在,可以查看有关如何使用 Build Insights 的每个选项卡的简短说明,以及详细说明文档的链接。

Build Insight 视图说明

Build Insights 路径调整

在 Build Insights 中更清晰地查看你的文件,悬停时查看完整路径。

我们隐藏了完整路径和相对路径,以减少混乱。 若要查看完整路径,只需将鼠标悬停在文件上即可。 你还将看到一个新的“文件名”列,用于文件和翻译单元,默认情况下显示该列,以帮助你快速识别文件,而无需解析冗长的路径。

Build Insights 路径调整

打开 Unreal Engine 项目的文件夹

一种打开 uproject 的新方法。

我们添加了一个额外的入口点,用于通过 Visual Studio 的 uproject 支持打开 Unreal Engine uproject。 现在,可以通过选择>直接从“文件”菜单中打开 uproject。这将在 Visual Studio 中打开 Unreal Engine 项目。

有关如何使用此功能的详细信息,请参阅在 Visual Studio 中直接编辑 .uproject

Unreal Engine 打开文件夹

改进了更改签名

现在,可以使用改进的 C++ 接口更改签名。

我们更新了 C++ 的更改签名界面。 现在可以在参数配置部分中添加、移除和重新排列参数。 此外,还可以通过选择参数化并将其拖动到新位置来更改其顺序。

访问方法保持不变:按 Ctrl+. 触发“快速操作和重构”菜单,然后选择“更改签名”

改进了更改签名

用户报告的热门错误修复

📣查看此版本中所有用户报告的“bug 修复”的完整列表。

已知问题

  • 尝试调试启用了 HTTPS 且使用 WSL 调试配置文件的 ASP.NET Core Web 项目时,会出现“导出证书失败”错误。 发生此情况的原因是 中断性变更:开发证书导出不再创建文件夹。 在调试之前创建 %appdata%\ASP.NET\Https 文件夹可以解决此问题。

版本 17.12.3

发布时间: 2024年12月3日,2024年

热门 bug 修复 来自社区
使用 .NET 9 从 VS v17.11.6 升级到 v17.12 后出现的 NuGet 错误。 反馈票证
专用 Unity 消息错误地标记为未使用的IDE0051。 反馈票证
Intellisense 停止在 Word C++ 项目中工作。 反馈票证
修复了在包含嵌入语言的文件中键入时可能会复制字符的问题。 反馈票证
修复了在 .razor 文件和 .cshtml 文件中解决合并冲突将导致空窗口的问题。 反馈票证
Visual Studio 2022 中的 Azure Devops Permalink 不起作用。 反馈票证
修复了以下问题:如果环境变量DOTNET_SYSTEM_GLOBALIZATION_INVARIANT设置为 1,Visual Studio 将崩溃。 反馈票证
修复了C++项目的性能探查器启动错误。 反馈票证

版本 17.12.2

发布时间 26th, 2024

热门 bug 修复 来自社区
C++ IntelliSense 不再显示 Visual Studio 17.11 中运行 IntelliSense 的项目的错误。 反馈票证
Copilot 索引器进程不再锁定文件。 反馈票证
修复了面向 .NET Core 并使用 param-array 的 C++/CLI 代码中的编译器崩溃。 反馈票证
适用于 iOS/tvOS/macOS/macCatalyst 的 .NET 发行说明
Windows 更新KB5041580后,Visual Studio 在打开合并编辑器窗口时以无提示方式崩溃。 反馈票证
[LKG18]某些收缩包装函数在其次要片段中具有不完整的展开信息。 反馈票证
arm64 内部编译器错误 C1001。 反馈票证
SSDT 崩溃,VS17.12 中遇到严重错误。 反馈票证

版本 17.12.1

发布日期:2024 年 11 月 19

热门 bug 修复 来自社区
修复了滚动时语法颜色闪烁问题 https://github.com/dotnet/roslyn/pull/75796
此版本包括用于维护符合国际语言法的更新。

团队全体成员感谢你选择 Visual Studio。 如果你有任何疑问,请通过 Twitter开发者社区联系我们。

祝你编码愉快!
Visual Studio 团队


注意

此更新可能包括单独许可的新 Microsoft 或第三方软件,如第三方通知或其随附许可证中所述。