Rider 2022.3 提供了对 .NET 7 SDK 的支持,包括 C# 11 的最新功能。 此版本具有显著的性能改进,特别关注启动时间和通过远程开发在 WSL 2(适用于 Linux 2 的 Windows 子系统)上运行 Rider 的功能。 我们还引入了多个显著的 UX/UI 更改,例如多显示器设置的工具窗口停靠。 最后,此版本还加深了与 Unity 和 Unreal 编辑器的集成。
我们做出多项更改,提高了 Rider 的启动速度并减少了打开解决方案和开始工作所需的时间。
在此处详细了解 Rider 的性能改进。
Rider 现在通过 IDE 的远程开发功能支持 WSL 2(适用于 Linux 2 的 Windows 子系统)。 这意味着您可以在 WSL 2 实例上使用 Rider 浏览解决方案和源代码,以及构建、调试和运行应用,就像它们存储在本地一样。
可以从 Rider 的欢迎屏幕启动一个简单的设置过程。 UI 将通过远程开发功能提供,这意味着无需 WSLg,本地 RemoteDev 客户端将自动安装。 有关详情,请参阅远程开发文档。
备受期待的将工具窗口停靠到浮动编辑器标签页的选项终于推出了! 为了让您可以更轻松地安排工作空间并在多个显示器上与 Rider 交互,我们实现了将工具窗口拖出主窗口并将其停靠到浮动编辑器标签页的选项。
我们微调了 Search Everywhere(随处搜索)结果列表背后的算法,使其行为更可预测,使其能够更准确地选择您正在搜索的元素。 现在,开始输入查询时,IDE 会冻结出现的第一个搜索结果,并且不会在找到更多选项时对其重新排序(早期版本的情况)。
我们引入了新的 Attach to process(附加到进程)对话框以改进用户体验,尤其是通过 SSH 附加到进程的情况。 我们的目标是帮助您更快找到和选择正确进程,并让 IDE 记住选择的调试器。
我们重做了粘贴操作 (⌘V / Ctrl+V) 的行为,改进了编辑体验。 现在,如果在没有选择代码的情况下复制 (⌘C / Ctrl+C) 或剪切 (⌘X / Ctrl+X) 一行,粘贴操作会将剪贴板的内容添加到当前行上方,而不是像旧版本一样添加到文本光标处。
新增的 Edit | Paste Special: JSON as Classes
(编辑 | 特殊粘贴:将 JSON 作为类)操作可以“智能粘贴”对象。 例如,使用此操作复制粘贴 JSON 时,它将根据该 JSON 自动生成 C# 类。
我们邀请您在 Preferences/Settings | Appearance & Behavior | New UI Preview
(偏好设置/设置 | 外观与行为 | 新 UI 预览)中切换到基于 IntelliJ 的 IDE 的新 UI。 新 UI 旨在降低 IDE 的视觉复杂性,帮助您集中注意力。
我们还将继续小幅优化 Rider 的用户体验和 UI,使其更加实用:
File | New
(文件 | 新建)已重命名为 File | New Solution
(文件 | 新建解决方案),以更好地反映将执行的实际操作。 Rider 2022.3 正式提供对 .NET 7 SDK 的支持,包括:
ref
字段和 scoped
关键字。 我们添加了对 UTF-8
字面量的基础支持。 代码分析现在会建议对字面量使用 u8
后缀,而不是 System.Text.Encoding.UTF8.GetBytes()
方法或具有适当 UTF8
符号的字节数组。 还有一组针对 UTF-8 字面量的编译器警告和错误。
对 file 局部类型的基础支持包括对新语法的理解、类型的 file
可访问性修饰符、编译器警告和错误以及相应快速修复,例如为嵌套类指定 file
修饰符时的 Move class to outer scope(将类移动到外部范围)。 还新增了一项实用的上下文操作,可以将通用类型转换为 file 类型。
Rider 现在可以将常规字符串和逐字字符串转换为原始字符串。 这也意味着许多现有字符串功能可用于原始字符串。
在此版本中,我们引入了使用新的 C# 11 列表模式语法(而不是使用后续索引器访问表达式进行常规集合长度检查)来检查集合中相应条目的建议。
从 C# 11 开始,您可以对接口中的 static
成员使用 abstract
和 virtual
修饰符,并在类型形参受此接口约束的泛型代码中使用此类成员。 更新的 Rider 可以像处理普通多态成员一样处理多态 static
成员:
override
关键字后的代码补全建议还包括接口成员,因此现在您可以轻松实现 abstract 或 virtual static
成员。 >>>
) 运算符 Rider 现在可以识别 C# 开发者为了对有符号数据类型执行无符号右移而必须编写的繁琐代码模式,并建议改用 C# 11 中的无符号右移 (>>>
) 运算符。
解析字符的 Span 时,您可能会经常使用 MemoryExtensions.SequenceEqual
方法。 C# 11 为这种检查引入了一种简写形式。 您现在可以使用 is
或 switch
表达式将字符的 Spans 与字符串字面量进行模式匹配。
Rider 现在建议使用 is
或 switch
表达式,而不是大量的 if
语句。
ref
字段和 scoped
关键字 从 C#11 开始,您可以在 ref
结构中声明 ref
字段。 Rider 支持此新语法规则,提供所有编译器错误和警告,在代码补全中显示 ref
关键字,并允许在构造函数中初始化此类字段。
Rider 还知晓新的 scoped
关键字,您可以在 by-ref
或 ref struct
实参和局部变量上使用它。 支持包括新语法的正确解析、代码补全中的 scoped
关键字,以及在生成方法重写时保留 scoped
关键字。 它还会验证 scoped
修饰符的兼容性,并为重写、接口实现和委托转换中不匹配的 scoped
形参提供快速修复。
C# 11 和 .NET 7 还为语言的 ref
安全规则引入了更改。 这些更改控制 by-ref
和 ref struct
变量可用的操作,以引入 ref
字段的方式在托管代码中提供 ref 安全性。 Rider 知晓这些更改,并将帮助您找到项目中需要更新的部分,并使用新的 scoped
关键字注解,以适应迁移到 C# 11 或 .NET 7 时的变化。
此版本具有许多语言注入改进:
我们添加了对使用 [StringSyntax]
(来自 .NET 7)和 [LanguageInjection]
(来自 JetBrains.Annotations)特性的语言注入的支持,以及对 // lang=<language_name>
语言注入指令注释的支持。
语言注入现在可以在任何语言的内插字符串和字符串串联中使用,此前仅可在 SQL 中使用。 请注意,使用字符串内插或与任意表达式的串联时,语法错误会被禁止。 C# 11 原始字符串中的语言注入也得到支持。
现在,原始字符串上会显示将缩进与实际值分隔开的缩进指南。
新增的装订区域标记图标可以向用户通知 C# 和 Razor 文件中的隐式命名空间导入。
在相应行上按 Alt+Enter,即可观察到隐式导入的完整列表以及相应 global using
指令所在源文件的信息。 选择特定导入命名空间后,Rider 可以导航到它被声明的位置,包括导航到 .csproj
项目文件中的 <Using Include="Some.NameSpace" />
标记。
Rider 还提供来自 _Imports.razor
的全局导入,并允许导航到相应的导入定义。
为了帮助您简化和加快开发过程,我们在 C# 中引入了用于代码补全选项的机器学习辅助元素排序。
为了增强此功能的使用体验,您可以在 Settings/Preferences | Editor | General | Code Completion | Machine Learning-assisted Completion
(设置/偏好设置 | 编辑器 | 常规 | 代码补全 | 机器学习辅助补全)中启用两个选项:
通过在 .NET 7 中添加 Int128
和 UInt128
数字类型,我们更新了代码补全格式说明符建议。
我们还添加了缺少的对 .NET 6 中 DateOnly
和 TimeOnly
日期/时间类型以及 .NET 5 中引入的 Half
半精度浮点数字类型的支持。
有时在重构之后,模式匹配表达式可能会变成普通的递归模式。 此时可能不值得使用递归模式语法,因此 Rider 现在提供将模式重写为更简单表达式的操作,同时保留原始模式匹配语义。
在调用后输入时,偶尔可能没有任何有意义的建议。 如果调用返回 void
的方法时调用没有产生任何值,就会发生这种情况。 这通常需要一些 IDE 操作后才能意识到(返回并导航到方法声明,或将鼠标悬停在调用上)。 在此版本中,我们针对此类返回 void
的调用引入了 void
提示条目,为您提供有关调用产生的类型的即时反馈。 如果缺少分号,接受此 void
条目将在调用后添加一个分号。
Rider 2022.3 为 Blazor Server 应用引入了热重载。 当您在 Blazor Server 应用运行时修改应用中的源代码时,Rider 会询问您是否要将此更改应用于正在运行的应用而不重新启动应用。 注意文本编辑器顶部的黄色 Sources are modified(源已修改)通知栏。 接受更改后,应用将即时更新,您可以继续使用更新后的应用。
为了响应社区的普遍要求,我们添加了新的 IIS Application
运行配置,用于在 IIS 服务器上运行和调试经典的 ASP.NET 应用程序。 我们还为 ASP.NET Core 应用程序引入了对来自 launchSettings.json
文件的 IIS
命令名称的支持。
我们将继续改进我们的 Endpoints(端点)支持和 Endpoints Viewer(端点查看器)。 查看器现在可以正确识别和收集 ASP.NET Core 7 最小 API 路由组的端点。 这意味着除了已经可用的功能之外,您还可以在使用 MapGroup()
API 声明的端点上搜索、浏览和使用智能代码补全。
为 ASP.NET 项目添加了 .NET User Secrets(.NET 用户密钥)操作。
Rider 现在可为解决方案 (.sln
) 引用的 JavaScript 和 TypeScript Web 项目 (.esproj
) 自动生成 npm
运行配置。
Code Vision 嵌入提示现在也适用于 JavaScript 和 TypeScript。 通过这些提示,可以更轻松地跟踪代码中各种类、方法、类型别名和接口的用法。
IDE 现在可以理解 @supports
at 规则,它将语句块与 @supports
条件相关联。 This build also includes support for viewport units, range media queries, container queries, @layer (Cascade layers), and color modification functions.
我们在 Angular 模板中添加了对类型缩小的支持,这将提供更精确的类型信息和更好的代码补全建议。
此外,Rider 现在会从全局搜索中排除 .angular
缓存文件夹,帮助提供更好的搜索结果。
Rider 中的 Unity 支持将获得另一个重大更新,包括新功能、现有功能改进以及修正。
我们添加了对 Unity 新 Input System 软件包的支持。 Rider 会识别将方法用作输入的事件处理程序的情况,并且不再将它们显示为未使用。 Find Usages(查找用法)也适用于这些方法,显示它们在代码或 .inputactions
文件中的使用位置。
能够在运行时加载游戏资源会很棒,Rider 现在可以帮助确保您在 Resources.Load
方法中使用正确的路径。 它会在您输入时显示代码补全,并高亮显示任何包含警告的未知资源。
Rider 已经为多个版本提供了标记名称的补全和验证,2022.3 版本添加了对 GameObject.FindWithTag
方法组的新支持。 它会在您输入时提供代码补全,并在您尝试使用项目中不存在的标记时发出警告。
在 Unity 项目中,保持元文件与文件和文件夹同步非常重要。 如果您试图将空文件夹的元文件提交到源控制中,Rider 2022.3 会发出警告。 更实用的是,如果 Unity 编辑器已开启,出现未保存的场景或资源时,Rider 会发出警告,帮助您确保在提交时不会错过更改。
当然,还有许多较小的改进和修正。 我们减少了加载超大项目所需的时间,添加了在尝试编辑只读软件包文件时显示的通知,并改进了 Find Usages(查找用法),使其可用于嵌套预制件和事件处理程序数组中的方法。
在 DOTS 支持中,Rider 现在知道不将实现 IBaker
或 IAspect
的类标记为未使用。
您可以为序列化字段禁用命名检查,像普通字段一样对待它们,并且在线文档的链接现在会指向正确的位置。
我们还要感谢 Unity 提供的修正,帮助调试 Nintendo Switch 上的玩家。
Rider 提供了在通过 Rename(重命名)重构重命名 Unreal 类或属性时添加 CoreRedirects 的选项。 现在也适用于:
UFUNCTION()
USTRUCT()
UENUM
执行 Rename(重命名)重构时,Rider 会在这些情况下建议添加 CoreRedirects。
如果您同意,相应的 .ini
文件会自动更新。
现在,重命名很难再让游戏崩溃了!
Rider 2022.3 引入了新的特定于蓝图的 Code Vision 指标。 您现在可以快速检查有多少蓝图使用 BlueprintCallable
函数,并从 Code Vision 上下文菜单中获取所有用法的列表。
Generate GUID(生成 GUID)工具现在支持 Unreal Engine GUID 格式。 当您需要快速生成 GUID 时,只需从菜单中选择 Tools | Generate GUID...
(工具 | 生成 GUID…),首选的十六进制格式将被预先选择。
补全时自动导入功能可以为您节省大量时间。 但是,如果它添加了不正确的 #include
指令,则问题可能难以检测。 我们一直在努力完善此功能,并确保它不会在自动导入时从系统头中建议不需要的实体。 默认情况下,不会建议系统头,但如果您需要,可以在 Settings/Preferences | Languages & Frameworks | C++ | Unreal Engine
(设置/偏好设置 | 语言和框架 | C++ | Unreal Engine)中启用。
我们改进了 UnrealBuildTool 日志的表示。 为确保您不会错过有关项目配置的任何警告或错误,日志面板现在包括时间戳,并保留 UnrealBuildTool 先前运行的日志。
.uproject
支持 对于基于 Unreal Engine 的项目,Rider 适用于 .sln
和 .uproject
项目。 我们将继续增强对原生 .uproject
模型的支持,使其更准确、更易用:
.project
中指定的额外源位置,特别是 AdditionalRootDirectories
和 AdditionalPluginDirectories
。 .Build.cs
文件的模块,用于平台特定的模块。 .uproject
项目模型时,.uplugin
和 .uproject
文件中的补全和检查也已获得支持。 .uproject
模型,就会自动为 C++ 程序生成运行配置。 我们为 Unreal Engine 项目实现了 Attach to Unreal Editor(附加到 Unreal Editor)操作。 它允许您快速附加到 Unreal Engine 进程,而不必手动搜索。 目前,您只能附加到与 UnrealLink 连接的同一进程,这意味着在 Unreal 编辑器中运行的项目应该与您在 Rider 中处理的项目相对应。 我们将在未来版本中改进此工作流。
Rider 2022.3 现在可以在 Windows 和 Linux ARM64 上运行。 所有基础开发工作流都已得到支持,包括运行和调试 .NET 应用程序以及运行单元测试。 但是,在我们继续工作和运行测试以确保 Rider 在 ARM64 处理器上顺利运行的同时,我们希望您了解以下限制:
除 Windows 外,dotMemory 现在也可用于 Linux 和 macOS 上的 JetBrains Rider。 Run(运行)微件和 Run | Switch profiler configuration
(运行 | 切换分析器配置)菜单提供了两种新的分析模式:Memory (sampled allocations)(内存(采样分配))和 Memory (full allocations)(内存(完全分配))。 您可以在 dotMemory 的帮助中详细了解它们之间的差异。
您可以从 Run(运行)菜单将分析器附加到正在运行的进程,实时查看 Timeline Graph(时间线图)展开。 选择时间间隔以打开 Memory Allocations(内存分配)视图,这与 dotMemory Standalone 中相同。 它可以分析特定时间范围内的分配对象和分配调用树。
不过,在这个版本中还不能收集内存快照。
Dynamic Program Analysis (DPA) 添加了新检查,可让您发现与数据库使用相关的各种问题,例如:
新检查适用于所有使用 Entity Framework Core 和 SQL Server 的 .NET 数据提供程序的应用程序。
我们已将 Show Covering Tests(显示覆盖测试)操作添加到代码编辑器和 Unit Test Coverage(单元测试覆盖)窗口中的 dotCover 上下文菜单。 此操作会显示一个弹出窗口,其中所有覆盖测试都在同一位置。 弹出窗口还允许您创建新的覆盖会话。
现在,dotCover 仅复制 JetBrains Rider 中持续测试所需的程序集和符号文件。 这提高了 dotCover 的整体性能,特别是在大型项目中,因为它不再需要复制整个工作目录。 如有必要,您可以在 dotCover 设置中调整卷影复制文件筛选器。
以前,要分析 Unity 测试的覆盖率,您必须重启 Unity 并启用覆盖率支持。 从此版本开始,不再需要重新启动 Unity,并且测试覆盖率开箱即受支持。
中央软件包管理(也称为 Directory.Packages.props
文件)是 .NET 技术栈一项不断发展的功能,随着它的改进,它应该使管理解决方案更容易向前发展。 随着 Rider 中 CPM 的加入,开发者应该可以更好地控制依赖项。
您可以在这篇博文中了解有关中央软件包管理的所有信息,包括提示和注意事项。
在解决方案中使用开源 NuGet 软件包时,项目都有暴露于安全漏洞的风险。 为了降低这种风险,我们在 Rider 中引入了漏洞依赖项检测。 IDE 将通过通知弹出窗口提醒您注意与 NuGet 软件包使用相关的漏洞依赖项,您可以在 Problems(问题)视图的 Security(安全性)部分进一步调查这些依赖项。 选择特定软件包,还可以在 NuGet Package Management(NuGet 软件包管理)窗口中找到与解决方案中所含软件包相关联的漏洞依赖项的信息。
我们还改进了 NuGet 工具窗口中 Packages(软件包)列表内的滚动体验。
Rider 2022.3 带来了对 F# 7 的支持,为小问题提供了各种修正,并增加了一些使用体验改进。
在注释中输入 <
将添加一个文档模板。 此外,语法高亮显示和代码补全使编辑文档注释更加简单。
新的代码补全规则简化了 record
表达式的输入,它会强调推断的 record
类型中的字段,隐藏已使用的字段,并修正之前不显示建议的各种情况。
我们添加了新的快速修复 Update parameter name(更新形参名称)和 Update record field(更新记录字段),用于更新签名文件,使它们在更改代码时更易使用。 A huge thanks goes to Florian Verdonck for implementing them!
这些只是 F# 支持改进的亮点。 You can find the full list of F# features included in the 2022.3 release here.
以下是 Rider 2022.3 针对使用数据库的新功能的一些亮点:
了解详情:DataGrip 2022.3 最新变化
Rider 的 IL Viewer 工具窗口现在能够将代码反编译为不同级别的 C# 语言构造。 有两个可用的 C# 级别:高级 – 使用最新语言功能简化了某些语法构造,低级 – 用于您想知道这些语法构造如何脱糖的情况。
Rider 2022.3 中的代码高亮显示和波浪线得到了大修。 由于内部逻辑差异,Rider 曾经与 Microsoft Roslyn 的代码样式分析器发生冲突,导致其显示重叠高亮显示,在不同的位置绘制相同的高亮显示,或者双重波浪线。 大多数此类情况背后的逻辑差异现已得到解决,对于极少数异常,会提示错误并就如何解决冲突提出明确建议。
此外,Rider 现在将为 Roslyn Analyzers 生成的检查在 Quick Documentation(快速文档)工具提示中显示 Roslyn Analyzer ID 和 URL Reference(URL 引用)。
我们实现了直接运行 clang-format 二进制文件的选项,不再使用 Rider 的格式化程序引擎,确保与行业标准格式化程序完全兼容,提供更好的性能和更广泛的格式设置选项。 转到 Settings | Editor | Code Style | C++
(设置 | 编辑器 | 代码样式 | C++)并选择 Clang-format 选项,您可以在捆绑的 clang-format 和外部 clang-format 选项之间切换。
我们通过将 Allow property evaluations and other implicit function calls(允许属性评估和其他隐式函数调用)选项禁用大幅提高了调试器性能。 它现在可以在无副作用模式下为 .NET、.NET Framework 和 .NET Core 项目计算更多表达式。
我们让单元测试资源管理器树变得“懒惰”,使它更快并且给内存的负担更少。 以前,所有节点都与单元测试树一起自动创建,导致它在浏览时滞后并消耗过多内存。 现在,只有属于树展开部分的节点会被创建,从而显著提高性能。
32 位
版本的 MSBuild 内存不足,并切换到使用 64 位
版本的 Visual Studio。 Solution Wide Analysis(解决方案级分析)和 Find usages(查找用法)命令已被重构。 根据内部测试,它们的性能平均比以前提高了 20-40%。