本文摘自网事全知道,侵删。
此版本的 Visual Studio 2022 版本 17.0 预览版 4 中的新增功能摘要
可扩展性
- 从 Microsoft.VisualStudio.Language.Client 程序集中删除了 API
编程语言
- C#10
C++
- 支持开关下的 libfuzzer -fsanitize=fuzzer。有关更多详细信息,请参阅文档。
- Hot Reload for C++现在支持 CMake 和 OpenFolder 项目。
- 实现了/scanDependencies用于为 CMake 项目输出 C++20 模块依赖项的标志,如P1689r3 中所述。这是支持使用 CMake 构建基于模块的项目的一步,我们正在努力在以后的版本中完成此支持。
- 我们在代码分析工具中改进了空指针取消引用检测。
- 我们已将 Visual Studio 附带的 CMake 版本升级到 3.21 版。有关可用内容的详细信息,请参阅CMake 3.21 发行说明。
- MSVC 工具集现在默认为调试记录中的SHA-256源散列。以前,该工具集默认使用 MD5 进行源散列。
- 使用 C++ 工作负载的游戏开发者现在安装支持 Visual Studio 2022 的最新虚幻引擎。
.NET 生产力
- 同步命名空间以匹配解决方案资源管理器中的文件夹结构
- 从解决方案资源管理器配置后台代码分析
.NET 热重载
- 改进用户体验(带有选项的新按钮),应用更改保存和设置
- 支持热重载 .NET MAUI 应用程序(iOS、Android 和 WinUI)
- 对 ASP.NET 方案的改进
- 现在支持更多编辑
XAML 热重载
- 改进了对 .NET MAUI 应用程序的 XAML 热重载的支持
- 改进了对 WPF 和 WinUI 应用程序在同一会话中同时使用 XAML 和 .NET 热重载的支持
XAML 实时预览
- 添加了对 .NET MAUI 和 Xamarin.Forms 应用程序的支持(Android 模拟器)
- 添加了对 WinUI 3 和 UWP 应用的支持
测试工具
- 在测试资源管理器中显示
- Web 负载测试和编码的 UI 测试支持更新
JavaScript/打字稿
- 我们发布了一种新的 JavaScript/TypeScript 项目类型,它使用附加工具构建独立的 JavaScript/TypeScript 项目。
- NPM GUI 可用,因此您现在可以像下载 Nuget 包一样下载 NPM 模块
调试和诊断
- 我们发布了一种名为 Dependent Breakpoint 的新型断点,它允许您将断点配置为仅在第一次命中另一个断点时启用。
- 我们为 Extrenal Sources 节点添加了更多更新,您现在可以在子节点“Modules without Sources”下看到模块,并加载符号表单解决方案资源管理器本身。
- 添加了 .NET 6 MAUI 工作负载的安装路径
- 确保在静态变量初始化期间在默认 AppDomain 中进行 ATL 字符串初始化。
- 发布包源映射功能将扩大客户对其软件供应链的控制。改进了已安装选项卡警告图标工具提示中的漏洞、启用和组合消息。
请查看我们在此版本中的开发者社区修复的完整列表。
- 在平台工具集 143 中使用 std:c++lastest 时,C++ 语法着色不起作用
- 在文件中查找在 vs2022 预览版 3 中不起作用
- 分支更改后,Visual Studio 不会重新加载所有更改的项目文件
- 激活语言服务器时出错
- 右键单击解决方案资源管理器中的任何项目并选择“签入”会给出异常消息。无法签入更改。
- Visual Studio UI 在构建期间生成过多的构建日志输出时无响应(例如:诊断详细信息)
- 用 C++ 开发 Linux - 静态链接是错误的
- VS2022 中的 T4 模板需要不兼容的使用
- C++20 模块无法获取来自不同模块的模板特化/重载
- 在“Live Share”会话中保存文件会打开“另存为”对话框,而不是直接保存文件
- C++ 项目无法在启动时重新加载项目外部的文件
- 使用函数指针错误编译回归
- 使用 /permissive- 和朋友对不明确的操作员调用 (C2593) 进行错误诊断
- 升级到 16.10 后,热重载不适用于 Xamarin.Forms UWP/IOS
- 加载 Entitlements.plist 模板时出错
- dllimport constexpr 默认构造函数的智能感知错误
- 系统找不到指定的文件(通过双击构建错误消息进行导航。)
- C++ 项目不再在 VS2022 中构建:找不到程序集“mscorlib.dll”
- VS2022 Preview 2.1 中的 Razor 编辑器速度很慢
- Intellisense 对 C++20 和
以下 API 将从Microsoft.VisualStudio.Language.Client程序集中删除:
- 财产 ILanguageClientInitializationInfo.Result
- 过时的中间层接口:ILanguageClientCompletionProviderILanguageClientDidChangeConfigurationProviderILanguageClientDidChangeProviderILanguageClientDidCloseProviderILanguageClientDidOpenProviderILanguageClientExecuteCommandProviderILanguageClientWorkspaceSymbolProvider
C# 10
- with在结构体 ( record struct Point(int X, int Y);, var newPoint = point with { X = 100 };)上记录结构体和表达式。
- 全局使用指令:global using指令避免using在程序中的许多文件中重复相同的指令。
- 改进的确定分配:确定分配和可空性分析更好地处理常见模式,例如dictionary?.TryGetValue(key, out value) == true.
- 常量内插字符串:由常量组成的内插字符串本身就是常量。
- 扩展属性模式:属性模式允许访问嵌套成员 ( if (e is MethodCallExpression { Method.Name: "MethodName" }))。
- 密封记录 ToString:一个记录可以继承一个带有密封的基础记录ToString。
- 增量源生成器:通过分解源生成管道和缓存中间结果来改善大型项目中的源生成体验。
- 混合解构:解构赋值和解构声明可以混合在一起((existingLocal, var declaredLocal) = expression)。
- 方法级 AsyncMethodBuilder:用于编译async方法的 AsyncMethodBuilder可以在本地覆盖。
- #line span 指令:允许像 Razor 这样的源生成器使用#line指定目标跨度 ( #line (startLine, startChar) - (endLine, endChar) charOffset "fileName") 的指令对线映射进行细粒度控制。
- Lambda 改进:允许在 lambda 上使用属性和返回类型;lambda 和方法组具有自然委托类型 ( var f = short () => 1;)。
- 内插字符串处理程序:内插字符串处理程序类型允许在赋值和调用中有效地格式化内插字符串。
- 文件范围的命名空间:具有单个命名空间的文件不需要额外的大括号或缩进 ( namespace X.Y.Z;)。
- 无参数结构构造函数:支持结构类型的无参数构造函数和实例字段初始值设定项。
- CallerArgumentExpression:此属性允许捕获作为字符串传递给方法的表达式。
有关更多详细信息,请参阅C# 语言功能状态和重大更改。
.NET 生产力
在同步名称空间重构是在(右击)菜单现在可以在解决方案资源管理项目或文件夹,让您轻松同步命名空间来匹配您的文件夹结构。
后台代码分析配置现在可在解决方案资源管理器(右键单击)菜单中使用。右键单击解决方案资源管理器中的解决方案节点,然后选择分析和代码清理。接下来,选择设置分析范围以配置后台代码分析的范围。
.NET 热重载
在此版本中,我们继续改进热重载体验,包括支持更多 .NET 框架和运行时场景、更多支持的编辑以及对用户体验的改进。
改善用户体验
Visual Studio 中面向 .NET 和 C++ 开发人员的热重载体验现在具有改进的工具栏按钮,具有更多功能和新的设置面板。
- 新的热重载按钮:这个新按钮有一个新图标,命令从“应用代码更改”重命名为“热重载”。
- 轻松重启应用程序:如果需要通过重建应用粗鲁的编辑,无论您是使用调试器启动应用程序还是在没有调试器的情况下启动应用程序,您现在都可以轻松重启正在运行的应用程序。如果您有一个有效的 .NET 更改,但热重载不支持在运行时进行更新而无需重建,则可能会发生这种情况。
- 保存时热重载:以前您只能在 ASP.NET 项目中应用保存时热重载更改。在此版本中,现在可以使用新的选择加入设置“文件保存时热重载”支持热重载的任何项目类型的热重载。启用后,所有项目类型都将在保存时应用更改。
- 轻松设置访问:在此版本中,我们还添加了一个热重载设置面板,以便您在启用/禁用热重载时进行更多控制。您可以在 Visual Studio 的“选项 > .NET / C++ 热重载”中或通过单击设置通过热重载按钮下拉菜单访问这些设置。
支持的平台 (.NET MAUI)
在此版本中,现在可以在 .NET MAUI 应用程序中使用 .NET 热重载体验。当您使用 Visual Studio 调试器将 .NET MAUI 应用程序作为 WinUI、.NET 6 iOS/tvOS 或 .NET 6 Android 应用程序运行时,并且当您处于打开解释器(默认情况下打开)的调试配置中时,此功能有效新模板)。此功能适用于 .NET MAUI 和 .NET MAUI Blazor 应用程序。
已知问题和限制:
- 在 Android 和 iOS/tvOS 场景中,当 Mono 是运行时,只能编辑方法主体并对这些方法进行更改。在 .NET 6 中,对于以 Mono 作为运行时的任何平台,这将是一个限制,并且在使用 CoreCLR 运行时时支持更多的编辑(例如:作为 WinUI 3 应用程序运行的 .NET MAUI 应用程序)。
- 对于 .NET MAUI Blazor 应用程序,热重载不会自动刷新视图,并且 CSS 自动同步尚不可用。这些已知问题正在为未来的版本进行处理。
改进了对 ASP.NET 方案的支持
在此版本中,我们现在为处理 ASP.NET Core 和 Blazor 等项目类型的 ASP.NET 开发人员提供其他功能。改进包括:
- CSS 自动同步:现在可以在应用程序运行时更改 CSS 文件,并且在您键入时更改将立即应用于正在运行的应用程序
- CSHTML:编辑 Razor CSHTML 文件现在将支持更多类型的编辑
- 浏览器刷新:编辑 razor 文件现在将在调试时自动刷新 Web 浏览器中的更改。这以前仅在没有调试器的情况下启动应用程序时可用
注意:在使用热重载对 Razor 文件(.cshtml、.razor)应用更改时,有一个已知问题会导致工具错误并破坏应用程序功能。我们正在努力尽快解决这个问题。要解决此问题,请重新启动应用程序以应用 Razor 更改。
支持的编辑 (.NET)
现在可以使用热重载和编辑并继续机制对 C# 10 功能进行其他类型的编辑,这些新支持的编辑包括:
- 添加或更改全局 using 语句
- 添加或更改文件范围的命名空间
- 对 lambda 可能的编辑类型进行更多改进
- 更改 lambda 表达式中的属性
- 添加或更改具有无参数构造函数的结构
此外,现在还可以在方法中重命名参数。
XAML 热重载
改进了对 .NET MAUI 应用程序的 XAML 热重载支持
在此版本中,我们继续改进对 XAML 热重载的支持,同时从新的单一项目模板运行 .NET MAUI Android、iOS 和 WinUI 应用程序。在此版本中,现在可以进行以下类型的编辑:
- 更改动态和静态资源
- 修改网格中项目的顺序
- 将网格更改为 StackPanel
- 制作新元素并分配它们
注意:随着 .NET MAUI 朝着正式版本的方向发展,XAML 热重载团队正在努力帮助识别和修复平台内的问题,以帮助确保 XAML 热重载功能可靠地工作。目前,XAML 热重载机制的某些方面将无法正确应用,我们将继续对每个版本进行改进。我们强烈建议您向我们发送 VS 反馈,说明任何对您不利的情况,因为这极大地帮助我们构建了高质量的产品。
改进了对一起使用 XAML 和 .NET Hot Reload 的支持:
随着 .NET Hot Reload 的推出,我们随着时间的推移进行了一系列改进,以便在同一个调试会话中同时使用 XAML 和 .NET Hot Reload 技术时实现尽可能流畅的体验。
在此版本中,我们启用了以下场景:
对于 WPF 和 WinUI 3 应用程序
- XAML 代码编辑器现在将正确显示由 IntelliSense 中的 .NET 热重载操作创建的新创建的控件类型和属性
- 使用 .NET Hot Reload 绑定到新创建的属性现在将按预期工作。对于 WinUI,您现在还可以使用 x:Bind 绑定到新属性
对于 WPF 应用程序
- 为使用 .NET Hot Reload 创建的事件处理程序添加新创建的方法现在将起作用
为了帮助我们测试这些新功能,请确保在“选项 > 预览功能 > XAML IntelliSense 更新后 .NET 热重载”下打开预览标志。
注意:虽然如果首先使用 .NET 热重载应用类型,然后使用 XAML 热重载,则上述方案有效,但存在已知限制。例如,如果您将使用 XAML 热重载的新属性添加到尚未创建的属性,然后仅使用 .NET 热重载来创建它,则 XAML 更改将看不到新属性。我们已经意识到这个问题,并希望在未来改进它。
XAML 实时预览
借助 XAML Live Preview,现在可以捕获正在运行的应用程序的屏幕并将其放入 Visual Studio 中的停靠窗口中,从而更轻松地使用 XAML 和 .NET 热重载来更改应用程序,并立即从右侧看到 UI 更改Visual Studio IDE。
在此版本中,我们将支持扩展到 WPF 之外,WPF 是第一个受支持的框架,现在包括:
- WinUI 3 或通用 Windows 平台 (UWP) 应用
- .NET MAUI 在 Android 模拟器中运行或作为 WinUI 3 应用程序运行
- Xamarin.Forms 在 Android 模拟器中运行或作为 UWP 应用运行
仍然存在一些限制,例如 Xamarin.Forms 和 WinUI 平台中没有元素选择,并且无法通过 XAML Live Preview 与正在运行的应用程序进行交互。
测试工具
- 在测试资源管理器中显示 (Ctrl+E,S):在测试资源管理器中显示是能够从光标在编辑器中的测试方法中的位置跳转到测试在测试资源管理器中的位置。这可能会让您想起与 Active Document 同步的类似功能,该功能可在解决方案资源管理器中突出显示您当前正在使用的文档。这是开发者社区中投票最多的项目之一,因此感谢所有投票并帮助我们优先考虑此功能的人!在测试资源管理器中显示也可从编辑器右键单击菜单、CodeLens 测试字形和解决方案资源管理器中的右键单击中获得。
- Web 负载测试和编码的 UI 测试支持更新:Web 负载测试记录器现在在 Visual Studio 2022 预览版 4 中可用。编码的 UI 测试记录器不会包含在 Visual Studio 2022 中。您仍然可以运行编码的 UI 测试并通过在 Visual Studio 2022 中编写代码来创建新测试,但记录器依赖于无法移植的 32 位依赖项。您仍然可以并排安装 Visual Studio 2019 以使用编码的 UI 记录器。提醒一下,Web Load Test 和 Coded UI Test 已于 2019 年弃用,我们确实计划在可以最大程度地减少对用户的影响时将它们从产品中删除。我们强烈鼓励对 Web UI 测试感兴趣的用户采用新的跨平台和开源 Web 测试框架Playwright. 除了支持所有主要浏览器和更好地处理异步代码之外,Playwright 还内置了测试记录功能。
- 我们发布了一种新的 JavaScript/TypeScript 项目类型,它使用附加工具构建独立的 JavaScript/TypeScript 项目。在此处阅读更多相关信息
- NPM GUI 可用,因此您现在可以像在新的 JavaScript/TypeScript 项目中下载 Nuget 包一样下载 NPM 模块
调试和诊断
依赖断点
这是一个新的断点,允许用户配置一个断点,只有在第一次命中另一个断点时才启用。调试时,Visual Studio 调试器只会在命中先决条件断点时暂停依赖断点上的应用程序。您可以通过从设置窗口中启用“仅在命中跟随断点时启用”复选框并从下拉列表中选择您希望配置依赖断点的先决断点来将任何断点转换为依赖断点。
外部源节点更新
解决方案资源管理器中的外部源节点现在也支持 C++。此外,我们添加了一个新的子节点,它为您提供所有尚未加载符号的模块。
您还可以使用右键单击上下文菜单直接从解决方案资源管理器加载符号,以便模块可以出现在外部源节点中。外部源节点的文件现在也按字母顺序排序。
以上就是VS2022 预览版4 更新的全部内容。
最后附加几张安装的效果图:
相关阅读 >>
美国交通局要求各大汽车厂商提供数据:帮助调查特斯拉autopilot
iphone 12/13/14齐上国产oled屏了:今年京东方供货量达3000万块
中兴、vivo遭印度审查 外交部:坚定支持中企维护自身合法权益
更多相关阅读请进入《新闻资讯》频道 >>