You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何执行依赖内部接口的Roslyn代码修复器?

问题解答

1. 依赖内部接口的修复器能否复用

依赖IPickMembersService这类内部接口的修复器,没法直接复用官方实现。Roslyn把这类涉及用户交互的服务设为内部接口,本质就是明确不对外提供扩展支持——这类修复器的设计仅适配官方IDE(比如Visual Studio)的内部服务生态,第三方IDE没有实现这些内部接口的权限和上下文。

你目前的处理方式没有问题,不是操作失误,而是这类修复器本身就不具备跨IDE复用的设计前提。

2. 快速判断修复器可用性的方法

可以从两个核心维度判断:

  • 检查依赖类型的访问修饰符:查看修复器生成的CodeAction是否依赖internal修饰的类型/接口。如果是,要么能通过反射绕过(比如你处理CodeActionWithNestedActions的方式),要么完全无法复用(像IPickMembersService这种需要实现内部接口的情况)。
  • 区分修复器的交互类型:
    • 无用户交互的修复器(比如添加缺失using、移除未引用变量):基本都能复用,哪怕依赖少量内部类型,反射大多能解决。
    • 需用户输入的修复器(比如选择成员生成Equals、重构时选作用范围):这类几乎都绑定官方内部UI服务,第三方IDE无法直接对接,要么自己实现替代逻辑,要么暂时放弃支持。

3. 可选替代方案(针对带交互的修复器)

如果一定要支持这类修复器,只能脱离官方实现,自己造轮子:

  • 针对GenerateEqualsAndGetHashCodeFromMembers这类场景,自己开发选成员的UI组件
  • 用Roslyn的SyntaxGenerator等公开API手动实现代码生成逻辑
  • 将自定义的代码变更封装成CodeAction,集成到你的IDE中

内容的提问来源于stack exchange,提问作者anakic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:52:24