在 JetBrains Rider 中调试源生成器 | Rider 教程

源生成器有助于开发者重新思考使用反射的方法,转而使用编译时技术避免昂贵操作的运行时开销。.NET 团队于 2020 年 4 月 29 日向社区推出了源生成器,采用这种新方法,可以通过 Roslyn 检查项目代码并生成新的 C# 源文件向项目添加新功能。

虽然源生成器的优点显而易见,但其使用或构建可能会较为复杂。好在 JetBrains Rider 解决了这些问题,使用它可以查看任意源生成器的输出、调试生成的工件,以及调试源生成器本身。 

这些技术都有助于梳理源生成流程,并让您成为更自信的开发者。接下来,我们就一起看看这些功能。

继续阅读前,您可以克隆我的示例源生成器项目


源生成器文件

引用源生成器时,源生成是在引用项目的编译过程中发生,明白这一点非常重要。在 JetBrains Rider 的 UI 中,导航到项目的 Dependencies(依赖项)节点就可以看到。

显示依赖项下的源生成器节点的解决方案资源管理器

项目中引用的每个源生成器和所有 C# 源生成的工件都有一个群组。

在 JetBrains Rider 中查看源生成的代码

调试源生成的文件

虽然查看源生成的输出有助于调试问题,但步入代码本身显然更为直接。使用 Rider 的调试器可以随时调查任何源生成的代码。首先,向使用生成的工件的代码添加断点,然后使用快捷键 Step Into(步入)即可逐步执行代码。

如果您熟悉 JetBrains Rider 调试器,现在就可以执行所有常规调试任务。


调试源生成器

我们最近增加了对调试源生成器本身的支持。运行源生成器需要一个上下文,这个上下文是项目。在源生成器项目中,需要使用 launchSettings.json 文件开始源生成器调试。这个文件通常位于 Properties 文件夹中。文件内容将类似于:

{
  "$schema""http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "Generators": {
      "commandName""DebugRoslynComponent",
      "targetProject""../ConsoleTest/ConsoleTest.csproj"
    }
  }
}

这个启动设置的关键部分是 DebugRoslynComponentcommandName 值。您还需要指定一个项目,用作源生成流程的上下文。完成这个文件后,即可使用装订区域中的 Play(运行)按钮开始调试流程。

在源生成器上运行调试进程

从这里,您可以在源生成器代码中设置断点并查看源生成期间使用的上下文。

特别注意:对于调试,JetBrains Rider 2023.1 目前支持 4.3.1 版本的 Microsoft.CodeAnalysis.CsharpMicrosoft.Net.Compilers.Toolset 软件包。因此,如果出现无法调试源生成器的情况,您的软件包版本可能较高。


快照测试

如果您正在寻找测试源生成器的其他方法,请查看 Andrew Lock 关于将 Verify 用于快照测试的文章。 

快照测试会运行测试并将输出与已知输出进行比较。当然,其作用不止于此,但是将测试输出与已知且经过验证的先前输出进行比较,是确保源生成器按期望发出代码的绝佳方法。

另外,还请尝试一下 Matthias Koch 的 Verify 插件,它将一流的 Verify 体验引入 JetBrains Rider。


JetBrains Rider 2023.2 

Roslyn 模板

虽然可能许多人都已经拥有一套自定义源生成器,但我们也知道 .NET 社区还有很大一部分对源生成器犹豫不决。因此,在 JetBrains Rider 2023.2 中,我们发布了两个新的 JetBrains 模板:Roslyn 分析器源生成器

显示 Roslyn 部分以及分析器和源生成器新模板的 New Solution(新建解决方案)屏幕。

使用这些模板,您可以从预配置的解决方案开始,该解决方案提供了核心项目、用于运行源生成器的示例目标项目,以及用于快速断言工作的单元测试项目。我们的目标是简化编写源生成器的入门流程,并让您预先获得更多价值。

如果您已经拥有一套源生成器项目,那么这些模板也可以作为参考,用来调整解决方案,使其与 JetBrains Rider 的调试体验更为协调。


结论

对于许多人来说,使用源生成器已经足够复杂,因此通过工具支持来更好地理解生成器非常宝贵。如果先前源生成器让您感觉有些可怕,我希望本文对工具支持的概述能带给您尝试的勇气。

本博文英文原作者:Khalid Abuhakmeh

Rider 相关阅读

关于 Rider

Rider 可以帮助您在 Windows、Mac 和 Linux 上开发 .NET、.NET Core、.NET Framework、ASP.NET、Unity 和 Unreal Engine 游戏或 Xamarin 应用程序。它为 .NET 开发中使用的语言提供了优异的编辑支持和代码洞察,包括 C#、F#、Razor/Blazor 语法、JavaScript、TypeScript、XAML、HTML、CSS 和 SQL。


Rider 含有 2500 多种实时代码检查,数百种来自 ReSharper 的上下文操作和重构,全部与 IntelliJ 平台强大的 IDE 功能集相结合。虽然功能极多,但 Rider 的速度仍然很快,反应也足够灵敏。


进一步了解 Rider

⏬ 戳「阅读原文」了解更多

本文分享自微信公众号 - JetBrains(JetBrainsChina)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

Redis 7.2.0 发布,影响最深远的版本 中国程序员拒写赌博程序被拔 14 颗牙,全身损伤达 88% Flutter 3.13 发布 System Initiative 宣布将其所有软件全部开源 字节首个大模型独立 App 亮相,Grace 更名“豆包” Spring 6.1 已兼容虚拟线程和 JDK 21 Linux 平板电脑 StarLite 5:默认搭载 Ubuntu、12.5 英寸 Chrome 116 正式发布 红帽重新部署桌面 Linux 开发,主要开发者被调离 Kubernetes 1.28 正式发布
{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/5494143/blog/10097731