Rider 最新变化

Rider 2022.2 包括整体性能改进、启动性能优化和解决方案级分析引擎。 对 C# 11 的支持经过扩展已涵盖 required 成员、checked 用户自定义运算符、原始字符串和列表模式。 在此版本中,您可以将相同的窗口布局设置应用到正在处理的所有解决方案。 此外,Unreal Engine 支持新增了 New Unreal Module(新增 Unreal 模块)和 New Unreal Plugin(新增 Unreal 插件)操作,以及在调试期间指定符号服务器以获取库符号的功能。

性能

适用于 Windows 后端的 .NET 6 运行时

Rider 的 Windows 后端已迁移到 .NET 6 运行时。 它现在使用 .NET 6 运行时在所有受支持的操作系统(Windows、macOS 和 Linux)上运行后端服务。 得益于 .NET 6 运行时自身的优化,Rider 的整体性能与 v2022.1 相比有所提升。

同时,我们还将 NGen 替换为 CrossGen 实用程序,从而在安装 Rider 后在 Windows 上创建原生映像。 由于 CrossGen 与 .NET 运行时配合运作并且能够跨平台,这有助于 Rider 更快启动和打开解决方案。

请注意,Rider 在安装期间不会运行 CrossGen,后者只会在 Rider 首次启动时运行。 这意味着首次启动可能需要稍长时间,但后续所有启动都会更快。

“冷启动”改进

“冷启动”改进

首次打开时(“冷启动”),解决方案启动速度更快,Rider 不会有相关信息。 冷启动时,所有项目都被加载两次:IDE 首先加载项目,获取各项目的信息,然后运行“NuGet restore”,当一切就绪时,它会再次加载项目。

我们优化了首次项目加载阶段,让 Rider 仅获取还原 NuGet 软件包所需的信息。 内部指标显示,新实现提升了约 40% 的提速。

解决方案级分析优化

在此版本中,我们显著优化了开启解决方案级分析模式时 Rider 的内存使用,无论是内存流量(内存分配的数量)还是内存消耗。

解决方案级分析引擎使用内存存储解决方案中的问题列表,并为执行解决方案级使用报告(代码检查,如“public 成员从未使用”)而存储类型/成员使用信息。 “热”使用数据表示它需要在编辑代码期间不断更新,并且不能卸载到磁盘上。 如果解决方案包含大量类型和类型成员,这可能会消耗大量内存。 经过对内存中所存储数据的研究,我们找出了允许删除重复数据/规范化数据的模式。 我们还通过专用集合类型进一步减小了工作集。 这些优化实现了 5-10 倍的内存消耗改进和更快的解决方案级分析加载。

C# 11

此版本引入了对 C# 11 预览中更多功能的支持。

required 成员

required 成员

在 C# 11 中,classstructrecord 类型能够声明 required 成员列表。 此列表包含所有必须在类型实例初始化期间初始化的必需属性和字段。 类型自动从其基类型继承这些列表,移除样板代码、重复代码,提供无缝体验。

除了能够检测 classstructrecord 类型中成员的 required 关键字之外,Rider 还为 required 关键字提供了额外支持:

  • 代码补全中具有 required 关键字。
  • 大多数编译器错误和警告均可用。
  • required 修饰符已添加到 Preferences/Settings | Editor | Code Style | C# | Syntax Style(偏好设置/设置 | 编辑器 | 代码样式 | C# | 语法样式)页面的 Modifiers order(修饰符顺序)中。
required 成员

新增的 Add initializer for required members(为 required 成员添加初始值设定项)快速修复适用于已创建类型对象但尚未初始化成员的情况。 它自动为对象生成所有缺少的 required 成员,您只需用有意义的数据填充成员的值。

checked 用户自定义运算符

checked 用户自定义运算符可以帮助开发者创建对算术溢出是有效概念的类型进行运算的用户自定义运算符。 Rider 可以显示所有编译器错误和警告。 为了完全支持 checked 用户自定义运算符,Rider 带来了更多检查和上下文操作。

更新的 Unchecked/checked context is redundant(unchecked/checked 上下文冗余)检查能够在此上下文中使用 checked 运算符时将其纳入考量。

如果您有一组用户自定义运算符并且其中部分已有 checked 版本,Rider 会帮助您将 checked 运算符传播到整个集合。 新检查 The operator does not have a matching checked operator while other operators do(运算符没有匹配的 checked 运算符而其他运算符有)将告知您哪些运算符尚无 checked 运算符,并建议自动生成 checked 版本的快速修复。

如果您还没有在代码库中使用 checked 运算符但想开始添加,可以使用新上下文操作 Create matching checked operator(创建匹配 checked 运算符)。 它适用于每个用户自定义运算符,可在 Alt+Enter 菜单中一键生成运算符的 checked 版本。

原始字符串

C# 11 引入了原始字符串的概念,以此改进将其他语言或文本格式嵌入 C# 代码中的功能。

Rider 具有基本的原始字符串支持,包括编译器错误和正确解析以及 """ 语法的颜色高亮显示、双引号对和内插字符串内的占位符({{...}} 语法)。

列表模式

C# 11 进一步扩展了语言中可用的集合模式。 C# 将允许类列表结构(例如数组、字符串和类 List<T> 集合)的匹配。

Rider 2022.2 完全支持具有错误检查、代码补全和代码分析的列表模式。 我们仍在推进代码检查的相关工作,这将用于在现有代码和其他重构操作中建议使用列表模式。

更多 C# 11 功能

更多 C# 11 功能

  • Rider 2022.2 完全支持新的无符号右移运算符 (>>>),包括对用户定义运算符 >>> 重载的支持。
  • Rider 2022.2 支持简化 Span<char> 值的使用以替代字符串实例,因为在 C# 11 中,字符串常量可以直接与 Span<char>ReadOnlySpan<char> 类型的值进行模式匹配。

代码分析

顶级语句

.NET 6 引入了使用 C# 9 顶级语句的新项目模板。 顶级语句简化了 Program 类或 public static void Main(string[] args) 方法的声明。 但有时,显式启动 class Program 是必要做法或更优解。 Rider 2022.2 添加了新的上下文操作 To explicit 'Program' class(到显式 'Program' 类),用于执行对旧样式的转换。

同时,如果您拥有现有 Program 启动类并希望迁移到顶级语句,可以使用新的 Convert to top-level code(转换为顶级代码)上下文操作。

INotifyPropertyChanged 支持的更新

在此版本中,我们重做了 INotifyPropertyChanged 支持。 它不再依赖于外部注解来检测常见 INotifyPropertyChanged API,我们由此能够自动支持更多的 MVVM 框架和 INotifyPropertyChanged 基类。 我们现在可以发出 SetField 方法,该方法能够为 INotifyPropertyChanged 通知实现最简洁的语法。

现在还可以为类型或文件中的所有属性添加 property change(属性更改)通知。

Alt+Enter 菜单中的重构

为了使重构更加醒目,我们研究了最常用的重构,并在 Alt+Enter 菜单中引入了依赖于当前上下文的相关上下文操作。

我们添加了在所选代码段上调用 Alt+Enter 菜单时的 Extract method(提取方法)上下文操作。

Change Signature(更改签名)、Transform Parameters(变换形参)、Convert to extension method(转换为扩展方法)和 Convert Property To Method(将属性转换为方法)重构现在都可用作成员签名的上下文操作。

关于使用 nameof 运算符的更多建议

Rider 2022.2 现在可以识别 WPF 项目中 DependencyProperty 的注册,并建议使用 nameof 运算符来捕获相应的 CLR 属性名称。 更新的内置实时模板将发出 nameof 而不是字符串文字。

Rider 通常无法识别代码中指定某些代码实体名称(如成员或类型名称)的特定字符串文字的特殊含义。 对此,我们为字符串文字引入了新的 Capture element name(捕获元素名称)上下文操作,其标识符可以引用包含字符串文字的上下文中的代码实体。

结构化搜索和替换

来自结构化搜索和替换 (SSR) 模式的快速修复现在可应用于文件、文件夹、项目或整个解决方案范围。 它会影响用户自定义模式、Rider 内置代码检查以及基于 SSR 的相应修正。

其他

Rider 2022.2 现在会在代码中检测到分配模式,并建议更多具有模式匹配的惯用 C# 代码。

Rider 2022.2 现在能够将 ?: 表达式下的部分 is 模式替换为 ?? 表达式下更简洁的 as,有效消除了临时变量。

UI/UX

窗口布局的默认设置

窗口布局的默认设置

我们实现了一种可以将相同的窗口布局设置应用到正在处理的所有解决方案的方法。 例如,如果将工具窗口移到右侧,所有解决方案都将位于此处。

如果您刚接触 Rider,那么此行为将是默认行为。 如未启用,您可以选择 Windows | Layout Settings | Use the Same Layout for All Projects(窗口 | 布局设置 | 对所有项目使用相同的布局),在主菜单将其启用。

重新设计的解决方案配置

在此版本中,我们重新设计了解决方案配置的显示方式。 Unity、Unreal Engine 或 Xamarin 等项目通常具有许多配置、目标和平台。 此前,这些实体的组合会在 Solution Configurations(解决方案配置)菜单中产生大量条目。 从 2022.2 版本开始,您不再需要浏览一长串条目来选择配置、目标和平台的确切组合。 只需逐一点击形参类型,直到选择所需组合。

重新设计的解决方案配置

为了减少主工具栏上的混乱,我们已将解决方案配置列表移至构建图标的下拉菜单(绿色锤子)。 反馈和统计数据表明,用户不会经常更改解决方案配置,因此在工具栏上特别保留一个微件似乎有些多余。 不过,如果您需要配置,可以使用绿色锤子图标旁边的下拉三角。 这将打开相同的列表。

如需将解决方案配置移回工具栏,您可以从列表中选择 Show Configuration on Toolbar(在工具栏上显示配置)。

处理 Unity、Unreal Engine 或 Xamarin 项目时,解决方案配置列表仍位于工具栏上,因为这些类型的项目大量使用解决方案配置。

可调整大小的 Run/Debug(运行/调试)微件

可调整大小的 Run/Debug(运行/调试)微件

为了回应社区反馈,主工具栏上 Run/Debug(运行/调试)微件的宽度已可更改。 如果工具栏上有空间扩展 Run/Debug(运行/调试)微件,您可以拖动微件图标的左角并调整其大小。 因此,您可以根据需要为微件创建更多空间。

合并所有项目窗口

macOS 上的 Merge All Project Windows(合并所有项目窗口)操作 macOS 11+

我们为 macOS 用户引入了一项功能,利用此功能可以将所有打开的项目窗口合并成一个,将其变成标签页。 转到 Window | Merge All Project Windows(窗口 | 合并所有项目窗口)即可执行此操作。

欢迎屏幕

欢迎屏幕

我们更新了 Rider 欢迎屏幕上 Cloning repository(正在克隆仓库)进度条的显示。 它现在直接显示在 Projects(项目)列表中,更清晰、更易用。

代码补全设置

代码补全设置

现在,您可以直接从代码补全弹出窗口中的垂直省略号菜单按钮访问 Code Completion Settings(代码补全设置)并配置偏好设置。

MAUI 支持早期预览

MAUI 支持

.NET Multiplatform App UI (.NET MAUI) 支持的早期预览已经推出。 在此版本中,我们支持以 Android 和 iOS 平台为目标的项目。 您可以使用运行配置运行和调试项目,还可以将应用程序部署到目标设备。 请注意,macOS、Mac Catalyst、Blazor Hybrid 和 WinUI 尚未完全受到支持。

Learn more: macOS Environment Setup for MAUI Development

Solution Explorer

自定义新工具栏

Safe Delete(安全删除)重构

我们在项目级别实现了 Safe Delete(安全删除)重构。 您可以使用 Delete 键或在 Solution Explorer 中的项目上使用 Refactor This(重构此)操作来调用它。 Rider 将搜索所选项目的用法。 如果存在用法,将显示冲突,如果不存在,项目将被删除,并且 Rider 将移除剩余引用或导入。 有一个选项可供在无需这些检查的情况下移除项目,在显示 Safe Delete(安全删除)对话框时取消选中 Search for usages(搜索用法)选项后,Rider 就不会运行此搜索。

对解决方案筛选器的更出色支持

对解决方案筛选器的更出色支持

您可以在 Rider 2022.2 中更轻松地使用筛选过的解决方案。 您现在可以从得出的解决方案中筛选出一个项目、一组项目、一个解决方案文件夹或者所有项目。 为此,请在 Solution Explorer 视图中的项目、解决方案文件夹或根解决方案节点的上下文菜单中使用 Solution Filter | Remove project(解决方案筛选器 | 移除项目)操作。 要查看被筛除的项目,请在 Solution Explorer 视图中启用 Show All Files(显示所有文件)模式并使用上下文菜单中的 Solution Filter | Add Project(解决方案筛选器 | 添加项目)操作。

对解决方案筛选器的更出色支持

除了这些基本操作之外,Rider 还提供了两个更高级的操作:Load Direct Project Dependencies(加载直接项目依赖项)和 Load Entire Project Dependency Tree(加载整个项目依赖树)。 这些将让 Rider 检查目标项目的所有依赖项并加载必需项目集,您可以由此快速开始处理筛选的解决方案。

Assembly Explorer

Assembly Explorer

Assembly ExplorerReadyToRun (R2R) 和 NGen 程序集提供了更出色的展示:

  • ReadyToRun (R2R) 和 NGen 程序集在 Assembly Explorer 中的显示方式已得到改进。 现在,每个程序集的名称旁边都会显示一个小的处理器型图标和 ngenR2R 标签。
  • Metadata 树具有 ReadyToRun 头。
其他功能

其他功能

  • Solution Explorer 视图显示源生成器生成的源代码文件。 您可以在 Dependencies | <Target framework name> | Source Generators(依赖项 | 目标框架名称 | 源生成器)下找到它们。
  • 项目在 Solution Explorer文件系统Unity Explorer 视图中按真正的字母顺序排序。

游戏相关

Unreal Engine 支持

新增 Unreal 模块

新增 Unreal 模块

创建带有游戏逻辑的新模块会带来许多杂事:添加文件夹、将 Build.cs 文件添加到文件夹、创建初始化模块的类、更新 .uprojectTarget.cs 文件等。 Rider 现在添加了一个可以帮助您自动执行这些任务的操作:Add | New Unreal Module(添加 | 新增 Unreal 模块)。

了解详情

新增 Unreal 插件

新增 Unreal 插件

如果您在 Unreal Editor 中尝试过创建新插件,那么您对这个操作一定不会陌生。 现在,您可以直接从 Rider 创建不同类型的插件,使用 Add | New Unreal Plugin(添加 | 新增 Unreal 插件)操作即可为新插件生成所有必要的文件。

了解详情

符号服务器

符号服务器

调试时,库符号有时在本地机器上不可用。 在这种情况下,您可以使用符号服务器。 在 Windows 版的 Rider 中,您现在可以将调试器配置为使用您选择的符号服务器。

了解详情

对规范测试的支持

对规范测试的支持

Rider 现已支持来自 Unreal Engine 自动化测试框架的规范测试。 在 DEFINE_SPEC 宏或 BEGIN_DEFINE_SPECEND_DEFINE_SPEC 宏之后的 Define 方法中定义一组测试后,Rider 能够成功发现它们,供您在单元测试视图中运行和观察。

类 Emplace 函数调用

类 Emplace 函数调用

Rider 现在理解类 Emplace 函数调用(例如 TArray<..>::Emplace)意味着对象构造,因此它会就传递给构造函数的无效实参向您发出警告。 您可以在输入实参时看到形参名称提示和形参信息。 您也可以直接在 Emplace 调用和构造函数定义之间跳转。

其他更新

  • 我们为 Unreal Engine 项目将主工具栏上的 Build solution(构建解决方案)按钮替换为 Build startup project(构建启动项目)按钮。
  • 在 Unreal Engine 项目中,代码补全列表现在包括 Widgets 元数据说明符。
Unity 支持

Unity 支持

  • Unity 项目上有了一个新工具栏,连接状态现在显示在工具栏而不是状态栏中。 此外,播放/暂停/步进按钮默认已从工具栏中移除,但可以添加回来。
  • 我们添加了检查,用于确保使用 Mathf 方法的返回值。
  • 您不再需要重新启动 Unity Editor 来启动分析进程。 分析器现在可以附加到或脱离正在运行的 Unity 进程。

插件

dotCover dotUltimate

我们向编辑器添加了覆盖摘要指示器。 dotCover 插件产生的红色和绿色高亮显示可能会稍显突兀,新工具在这方面有所改善。 在 Inspections(检查)微件中查找盾形图标。 颜色和填充反映了当前文档的代码覆盖,点击即可浏览未被覆盖的语句。

新的 Notifications(通知)工具窗口

dotMemory dotUltimate 仅限 Windows

Rider 现在内置我们的内存分析工具 dotMemory。 以下是其主要功能:

  • Run(运行)微件和主菜单中的 Run | Switch profiler configurations(运行 | 切换分析器配置)提供了两种分析模式:Memory (sampled allocations)(内存(采样分配))和 Memory (full allocations)(内存(完全分配))。 您可以在 dotMemory 帮助中详细了解它们的区别。
  • 您可以从 Run(运行)菜单将分析器附加到正在运行的进程。
  • 您还可以实时查看 Timeline Graph(时间线图)。 选择间隔并打开 Memory Allocations(内存分配)视图。 它相当于 dotMemory Standalone 中的相同视图,允许您深入研究特定时间范围的分析。

请注意,dotMemory 插件不允许收集快照,2022.2 版本仅适用于 Windows。

了解详情

缩放指示器

Markdown

现在,在 Markdown 文件中可以根据文档标题轻松生成目录。 新操作位于 Insert(插入)和 Generate(生成)弹出菜单中,可以通过 Alt+Insert 快捷键或右键点击调用。 Rider 将在当前文本光标处插入目录并以 <!-- TOC --> 标记将其括起,后续调用相同的菜单可以对其进行更新。

dotTrace dotUltimate

您不再需要重新启动 Unity Editor 来启动分析进程。 分析器现在可以附加到或脱离正在运行的 Unity 进程。

Web 开发

对 Angular 独立组件的支持

对 Angular 独立组件的支持

我们一直在推进 Rider 中对 Angular 14 的支持。 此版本最重要的新特性是对 Angular 独立组件的支持。 Rider 2022.2 现在可以正确识别标记为 standalone: true 的组件、指令和管道。

针对 Vue 3 的更新

针对 Vue 3 的更新

Rider 2022.2 对 Vue 3 提供了更出色的支持。 例如,它现在可以理解 v-if/else 指令中的类型缩小。 此外,对 Pinia(Vue 团队推荐的作为全局存储的状态管理解决方案)的支持也得到了改进。 现在,补全和解析都可以在 Vue 中与 Pinia 库一起使用,您可以导航到存储中定义的状态属性和操作。

TypeScript 4.7 支持

TypeScript 4.7 支持

Rider 2022.2 与 TypeScript 4.7 捆绑,支持在 Node.js 中使用 moduleSuffixes 和 ESM 等新语言功能。 如果 moduletsconfig.json 文件中被设为 node16nodenext,它会自动将 .js 扩展名插入 import 语句。 此外,Rider 还支持 package.json 文件中的 typesVersions 字段。

了解详情:WebStorm 2022.2 最新变化

F# 支持

我们为 F# 重做了 Parameter Info(形参信息)弹出窗口。

Parameter Info(形参信息)包含有关函数预期实参的详细信息。 弹出窗口会在编写函数应用程序或方法调用时显示,您也可以在阅读代码时按 Ctrl+P 查看。

从 v2022.2 开始,Parameter Info(形参信息)弹出窗口将支扩充应用程序并高亮显示正确的方法重载。 它还显示方法、函数和形参描述、形参默认值、扩展方法信息以及 JetBrains CanBeNull/NotNull 注解。 此外,您也可以在特性中查看 Parameter Info(形参信息)。

您现在可以使用 Fantomas 的全局或本地 dotnet 工具版本。 Rider 将自动使用对应工具,供您在团队中同步 Fantomas 版本。

新的快速修复 Change type of binding(更改绑定类型)适用于定义的返回类型与表达式的实际类型不同的情况。 Special thanks goes to Florian Verdonck for implementing this quick-fix.

You can take a look at the full release notes for more information about F# support in Rider 2022.2.

数据库支持

数据库支持
  • 我们引入了两种新的解析模式:Playground(演练场)和 Script(脚本)。 您可以在这篇博文中详细了解两者之间的差异。
  • Windows 身份验证再次可用于 Microsoft SQL 服务器。
  • 现在通过表的 DDL 为 Microsoft SQL Server 生成排序规则和字符集。
  • Rider 现在提供了对另外三个数据库的基本支持:DuckDB、Mimer SQL 和 Apache Ignite。

了解详情:DataGrip 2022.2 最新变化