.NET Tools News ReSharper Platform

API 验证器:开启 ReSharper 插件新时代

Read this post in other languages:

ReSharper 既是插件,也是强大的插件创建平台。 设计产品的各个方面时,ReSharper 开发团队采用了依赖项注入方法。 这就使 ReSharper 的任何组件都像一个可使用插件重写的构建块,为微调 ReSharper 行为带来无限可能。 

作为插件作者,您可以利用 ReSharper 开发者自己使用的所有组件。 但这种自由度也有不利的一面。

“每个公共组件都是一个扩展点”的策略限制了我们重构现有代码的能力。 为进程外模式准备 ReSharper 或为集成到 Fleet 准备我们的代码库等大规模重构也因此变得更为困难。 多年来,我们一直表示 ReSharper 的每个新版本都与已安装的插件不兼容,即使它们引用的 API 集在技术上没有发生变化。 由于我们的内部重构,我们无法保证无缝迁移。  

ReSharper 和 Rider 每年都会发布三个主要版本,因此直到最近,插件开发者每年都要被迫重新编译插件至少三次。 我们明白,这让插件编写者的工作颇为艰难,我们也意识到必须做出改变。 

因此,我们开始考虑让 ReSharper 的平台自动检测其插件引用的 API 中的变化。  

什么是 API 验证器? 

在 ReSharper 中,我们将每个插件都视为产品的重要组成部分。 所有部件在安装期间组合。 在这个阶段,我们现在可以检测插件使用的 API 是否被更改或在最新版本的 ReSharper 中不再可用。

如果 API 验证器发出危险信号,该插件将被标记为 Incompatible(不兼容),不会添加到安装的产品中。 但是,它将保留在 ReSharper 内 Extension manager(扩展程序管理器)中的已安装插件列表中。

通过 API 验证的插件将自动迁移到产品的下一个版本。 ReSharper 2023.1 实际上是第二个包含 API 验证器的 ReSharper 版本,因此在 2023.1 版本之前兼容的所有插件都将被保留。 

指定依赖项的新方式

引入 API 验证器的同时,我们还更改了指定与产品版本兼容性相关的依赖项的要求。 这需要讲一些背景。

在内部,我们把主要版本称为“wave”。 命名 wave 时,我们取发布年份的最后两位数字,再加上一位数字表示该年的版本编号。 例如,对于 2023 年的第一个主要版本,wave 名为“wave 231”,2022 年的第三个版本是“wave 223”。 

在插件中将 wave 名称指定为依赖项有两种好处。 第一,它将帮助我们验证软件包确实是 ReSharper 的扩展程序。 第二,指定兼容 wave 的范围让您可以指示哪些版本的产品与插件兼容。 

过去,我们建议为此使用区间表示法。 例如,如果您将区间表示法的范围指定为 [223-231),则表示插件仅与 2022.3 版本兼容。 但是,引入 API 验证器后,我们现在建议不使用区间表示法指定 wave。 您可以将 231 指定为 wave 依赖项来声明向前兼容性,如下所示:

<dependencies>
<dependency id="Wave" version="231.0.0"/>
</dependencies>

Marketplace 集成

在安装期间执行的 API 验证器的代码也在 JetBrains Marketplace 中实现。 这对插件开发者来说是个好消息,因为当 SDK 中不再出现所用 API 时,插件的页面现在会显示详细警告。 在每个抢先体验预览或主要版本公开之前,会在所有可用插件上执行 API 验证。 

JetBrains Marketplace 插件网页上的 API 验证结果示例。

插件开发者还可以选择在插件未通过验证流程时选择接收电子邮件通知。 这些电子邮件详细说明了哪些 API 已过时、被移除、更改或更新,帮助您将无法编译的部分归零,无需打开包含插件代码的项目。 

为 ReSharper 或 Rider 编写插件时需要帮助? 

接下来有什么值得期待的? 

目前,JetBrains Marketplace 中可见的产品兼容性信息仅供发布者使用。 我们不可能自动下架插件,即使我们确定它已经完全过时并且肯定与当前版本的 ReSharper 不兼容。 目前,我们在 Extension manager(扩展程序管理器)中显示这些插件可用,尽管任何安装它们的尝试都会失败,因为它们无法通过嵌入式验证。

将来,我们将从动态中清除此类插件。 带有插件的动态目前基于 wave 版本构建,而不是产品的实际构建号。 这意味着 ReSharper 2023.1 EAP 1 的插件列表与发布版本相同。 Marketplace 和 ReSharper 开发团队已经着手从基于 wave 的动态切换到基于构建的动态,敬请期待更多更新。 

致谢

我们要感谢 Mike-E 的无限热情,感谢他让我们注意到实现这一功能的重要性。

本博文英文原作者:

Sue

Sasha Ivanova

Discover more

level up with live templates

在 JetBrains Rider 中使用实时模板提高生产力

说实话, 编程的有些部分乏味又重复。 JetBrains 产品提供通用快速修复和模板来帮助减少样板代码,使大多数开发者受益。 即便如此,您的项目可能拥有独特的代码结构和模式,只有您和您的团队使用。  为您和您的团队创建一组专属模板在整个应用程序开发过程中使用是不是听起来不错? 使用实时模板,您就可以做到这一点。 本文将展示如何使用占位符变量创建新的实时模板并与其他项目成员共享模板。 什么是实时模板? 实时模板是一个代码块,可以扩展为循环、条件、声明或语句等常用构造。 在 JetBrains IDE 的上下文中,实时模板有一个与之关联的键,使其在扩展时易于记忆和访问。 此外,实时模板分为两类:简单模板和形参化模板。 简单模板仅包含固定的纯文本,用于减少生成样板代码时的按键次数。 形参化模板包括的变量会启用第二个步骤,使用基于文件类型上下文的计算值替换输入字段或让您手动指定值。 所有实时模板都可以使用语言或文件扩展名等类别限制在特定上下文中。 这种灵活性确保实时模板只在您需要的时间和位置出现。 创建新的实时模板 在本例中,您将创建一个新的 rec 实时模板,用来创建 record 定义和设置名称。 此模板仅在 C# 上下文中可用。 首先,打开 JetBrains Rider 的设置,导航到 Editor | Live Templates | C#(编辑器 | 实时模板 | C#)。 在

Remote Development with JetBrains Rider

使用 JetBrains Rider 进行远程开发

JetBrains Rider 2022.2 为 .NET 开发者带来了远程开发测试版。 我们此前已经为基于 IntelliJ 平台构建的其他 JetBrains IDE 引入远程开发,Rider 用户现在也可以在 .NET 平台上体验其强劲功能。 本文将回答“什么是远程开发?”、“我为什么要使用远程开发?”以及如何使用当前版本的 JetBrains Rider 进行远程开发等问题。 我们开始吧。 什么是远程开发? 远程开发很常见,可以追溯到专业计算的诞生之初。 用户使用终端远程连接到大型计算机来完成工作。 计算机终端具有非常精彩的历史,也帮助我们步入如今的现代个人计算时代。  与技术领域的大多数事物一样,趋势是周期往复的。 我们办公桌上寻常计算机的处理能力已经远超历史上第一批计算机科学家的想象,但这些设备仍然会在现代开发工作流中达到极限。 现在的工作负载可能需要大量 CPU、内存和 GPU,更不用说持续发展的量子计算了。 对于 .NET 开发者,这些限制已经超出了技术范围,还涉及多目标操作系统和硬件等问题。 虽然构建实体设备库是一个办法,但这对许多开发者来说并不现实。 虚拟化和模拟也有其局限性,因为托管开销通常会产生不太准确的结果。 现代开发者该如何克服这些挑战? 当然是采用远程开发! JetBrains 远程开发可以在任何支持 SSH 的远程服务器上托管源代码、工具链和 IDE