Visual Studio 徽标Visual Studio 2022(预览版)发行说明

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

功能

最新预览版中的所有新功能。

工作效率

从错误列表复制

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

你在“错误列表”中看到一个不知道如何修复的错误。 因此,选择它并点击 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 中执行任何操作。 现在,我们增强了此功能,以非阻塞方式运行。

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

保存时清理代码

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 聊天中的新手提示快速入门!

利用我们新推出的新手提示,快速开始你的 GitHub Copilot 聊天体验!

GitHub Copilot 新手提示

开始使用 GitHub Copilot 聊天时需要帮助吗? 我们引入了一些新手提示,用以启发和引导你完成首次互动。 这些预先挑选的问题旨在激发你的想法,帮助你探索 GitHub Copilot 功能的全部潜力。

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

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

重要

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


调试和诊断

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 键并单击要取消选择的快照。
查看差异

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

查看差异快照 M M A

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

自定义 Git 消息

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

IDE

多项目启动配置

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

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

多项目启动配置

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

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

注意

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


MotW 安全警告

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

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

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

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

可以通过转到工具 > 选项 > 环境下的信任设置来修改默认信任体验。

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

跨主题更改保留字体

更改主题现在将记住字体和字体大小首选项。

我们理解,开发人员在编码时选择的字体是个人选择,受可读性、辅助功能或美学偏好的影响。 Visual Studio 主题主要侧重于演示颜色,与你的首选字体无关。

通过此更新,我们引入了在切换主题时保留字体和大小选项的功能。 现在,你可以在 Visual Studio 中设置一次字体首选项,并切换主题,而无需每次重新配置字体设置。 请注意,字体的颜色仍然与主题相关联,因为这是主题的目的,但你的字体选择将被保留。

Visual Studio 编辑器使用相同字体显示相同的代码段,但其中一半的代码采用深色主题,一半为浅色。

默认情况下,将为所有用户启用此功能。 如果你更喜欢以前的行为,请转到工具 > 管理预览功能,找到将字体设置与颜色主题选择分开选项。 如果选中此选项,则无论主题如何更改,你的字体首选项都将保持不变。 取消选中该框,以恢复将字体选择与主题绑定的上一行为。

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

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 中的所有主要项目类型。

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

证书吊销检查

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 将使用应用程序服务的托管标识来访问资源。

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

桌面

增强的 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 应用。

现在,当设置 UseUwp 时,Visual Studio 会自动设置 UseUwpTools 属性,以便在常见方案中让 .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 中定义了共享值,它由设置为 localhost:7293HostAddress 变量组成。

在定义的三个环境中,开发环境都没有指定 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 功能

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

.NET

使用 .NET 9 实现更多功能

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

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

.NET 9

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

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

NuGet 审核可传递包

NuGet 正在更改默认审核设置,以包含可传递包。

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

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

NuGet 审核

在此版本中,NuGetAuditMode 的 NuGet 审核默认值已更改。 以前,默认情况下只报告直接包引用 (<NuGetAuditMode>direct</NuGetAuditMode>)。 现在,默认情况下,它将对具有已知漏洞的直接包和可传递包 (<NuGetAuditMode>all</NuGetAuditMode>) 发出警告。 若要保留以前的默认值,可以在项目或 Directory.Build.props 文件中显式设置 NuGetAuditMode 的首选值。

或者,可以将 SdkAnalysisLevel 设置为低于 9.0.100 的版本号,但请注意,这将影响使用 SdkAnalysisLevel 的所有功能。

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>

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

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 修复”的完整列表。

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

祝你编码愉快!
Visual Studio 团队


注意

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