聊到 C# 开发,尤其是用 VS Code 写 C# 的朋友,这两年一定绕不开一个名字:superpowers。这个扩展在 GitHub 上热度一直很高,很多人的第一反应是“这名字起得真敢”,第二反应就是“到底怎么装、装完怎么用”。我自己也是从踩坑开始,一步步把它调顺的,所以这篇就专门聊聊这个项目的落地实操,从环境准备到安装配置,再到我实际用下来遇到的坑和排查办法,一次性讲清楚。
先说它是什么。superpowers 是一个针对 VS Code 的 C# 扩展,核心作用是把 Roslyn 分析器、代码修复、重构操作、增量生成器这些东西整合进编辑器,让原本“能用”的 VS Code C# 环境变得“好用”。它不是要替代官方 C# 扩展,而是补全官方扩展在代码分析和快速修复上的短板。适合谁?如果你主力开发环境是 VS Code,或者你刚从 Visual Studio 迁移过来、怀念那些重构和修复提示,那这个扩展基本就是你的刚需。需要说明的是,下面提到的一些配置路径和操作步骤,是基于这个项目常见的使用方式整理的,不同版本会有细微差异,但整体思路是通用的。
1. 先搞清楚 superpowers 到底解决了什么问题
1.1 VS Code 写 C# 的痛点
用过 VS Code 写 C# 的人应该都有同感:开箱配置好之后,写起来确实顺了,但离“舒服”还差得远。官方 C# 扩展(现在叫 C# Dev Kit)主打的是项目管理和调试体验,但代码分析这块很多时候反应比较温吞。具体表现就是:using 没给你自动整理,潜在的空引用问题不标红,一些常见的重构操作(比如提取接口、反转条件、生成构造函数)在右键菜单里根本找不到。这时候你会觉得自己不像在写现代 C#,更像在用记事本加语法高亮。
1.2 superpowers 的定位与核心能力
superpowers 说直白点,就是把 Roslyn 分析器体系里的好东西搬进编辑器。Roslyn 是微软开源的 .NET 编译器平台,它不只是编译器,还提供了一整套代码分析 API。superpowers 做了好几层东西:
- 它内置了一批分析器和代码修复器,能识别出代码里可以改进的地方,并给出快速修复建议。
- 它把很多原本要在 Visual Studio 里通过菜单触发的重构操作,直接暴露成 VS Code 的代码操作(Code Actions)。
- 它支持增量生成器(Incremental Generator)的调试和测试辅助,这对写源生成器的人来说帮了大忙。
这些能力组合在一起,效果就是你在编辑器里按一下 Ctrl+Shift+P 或者点一下灯泡图标,就能看到一大堆可执行的操作:添加参数、生成比较操作、实现通知模式、创建自动属性、生成 XML 文档注释等等。这些操作以前只用 VS 的人可能觉得稀松平常,但对 VS Code 党来说确实是从无到有的变化。
1.3 它能做到什么程度
必须说清楚:superpowers 不是银弹。它不会把 VS Code 变成 Visual Studio 的完全体,一些重量级的可视化设计器、调试器高级功能它依然不涉及。但它在代码编辑体验这个维度上,确实把 VS Code 拉到了非常接近 VS 的水平。我自己在项目里主要依赖它做三件事:
- 写单元测试时快速生成断言、参数校验,省去大量手工敲击。
- 重构的时候大量使用“提取方法”“引入局部变量”这类操作,减少大范围人工修改带来的低级错误。
- 处理旧的 WPF 项目时,用它自动生成属性变更通知,比手写 INotifyPropertyChanged 模板要快不少。
所以它解决的问题非常明显:让 C# 开发者在轻量编辑器里,也能获得足够的代码智能辅助。理解了这一点,你才知道后面安装和配置时,哪些选项是必须开的,哪些可以关掉。
2. 安装前的环境准备与工具链选择
2.1 必须装好 .NET SDK 和 C# 官方扩展
很多人在装 superpowers 之后发现根本不起作用,排查到最后才发现是前提缺失。superpowers 是纯扩展层的东西,它不对编译器本身做改动,所以必须先保证机器上有一套能正常编译的 .NET 环境。
这里我建议直接用最新的 .NET SDK,虽然它可能要求你更新项目目标框架,但长期看是值得的,因为新 SDK 自带更完整的 Roslyn 版本。如果你的电脑里有多个 SDK 版本,可以在终端里这样确认主版本:
dotnet --list-sdks dotnet --version如果dotnet命令本身提示找不到,那说明 SDK 没装或没配环境变量,这时候需要先安装或修复 SDK 再继续。C# Dev Kit 或者旧版 C# 扩展则需要根据你用的 VS Code 版本安装,这块主要是为了项目加载和 IntelliSense 的底座。
2.2 为什么必须配好 C# 扩展再装 superpowers
这个顺序很容易被忽略。很多人打开 VS Code,搜到 superpowers 就直接 Install,然后发现功能没有生效,于是怀疑扩展有问题。其实原因是 C# 扩展负责提供“项目上下文”,superpowers 需要基于这些上下文去加载分析器和执行代码修复。没有项目上下文,它就只能做一些纯文本层面的语法猜测,效果自然大打折扣。
所以标准顺序是这样的:
- 安装官方 C# Dev Kit(或经典 C# 扩展,取决于你是否使用 .slnx / .csproj 工作区)。
- 打开你的 C# 项目文件夹,等右下角提示项目加载完成,看输出面板里 “C#” 日志是否出现“Project system has completed initialization”之类的字样。
- 确认普通编辑功能正常,比如飞intellisense能弹出、类名能跳转。
- 再安装 superpowers。
这一步我能给出的核心建议就是:先让“基础的”能跑通,再上“增强的”。
2.3 版本选择的经验
superpowers 的发布节奏和 VS Code 扩展市场保持同步。它有一个稳定版,还有每夜版(Nightly)。稳定版基本可以放心用,每夜版的目的是尝鲜和帮助项目反馈问题,但偶尔会引入一些调试中的问题,不建议日常开发依赖它。
还有一个细节:superpowers 依赖的 Roslyn 版本和你的 SDK 版本并不总是完全匹配。如果你用的 SDK 非常老,可能遇到加载分析器失败的问题。比如在某些 3.1 时代的老项目里,扩展能装上但代码修复列表是空的。这种情况下,或者升级 SDK,或者在项目里做兼容处理。不要把问题简单归咎于扩展不维护了,先检查 SDK 版本。
安装扩展本身可以用 VS Code 的扩展面板搜索 “superpowers”,作者是 David Wengier。也可以直接用命令行装,尤其是你有多台机器或者想写个初始化脚本的时候:
code --install-extension DavidWengier.superpowers这个命令在全球范围的机器上都是稳妥的。装完扩展需要重载窗口,这一步别跳过,不然插件注册的代码操作提供者都不会生效。
3. 安装步骤详解与激活验证
3.1 从扩展市场安装的完整流程
第 1 步:打开 VS Code,点击左侧活动栏里的扩展图标(或者按 Ctrl+Shift+X)。
第 2 步:搜索框里输入 “superpowers”,找到由 DavidWengier 发布的那个扩展,确认标识符是DavidWengier.superpowers。
第 3 步:点 Install。安装完成后,VS Code 一般会提示 Reload Required。为了保险起见,我习惯直接退出 VS Code 再重新打开项目,而不是在线重载,这样能避免一些扩展状态混乱的问题。
第 4 步:打开任意 C# 项目文件夹,等待底部状态栏的 OmniSharp 或 C# Dev Kit 初始化完成。如果你是旧版 C# 扩展,状态栏会出现 “OmniSharp Server Started” 之类的提示;如果用的是 Dev Kit,会在输出面板里看到 solution 加载信息。
第 5 步:右键点击编辑区,选择 “Source Action” 或者直接按 Ctrl+. 快捷方式,看看菜单里是否出现一堆操作列表。如果出现了,说明扩展的核心部分已经成功加载。
3.2 命令行安装与脚本化部署
如果你和我一样要维护多台开发机,或者有 Docker 开发容器,命令行安装绝对是效率最高的方式。我自己的初始化脚本里是这么写的:
code --install-extension ms-dotnettools.csharp --force code --install-extension DavidWengier.superpowers --force第一条命令中的ms-dotnettools.csharp官方扩展是老牌的 C# 扩展,新版的 Dev Kit 扩展 ID 是ms-dotnettools.csdevkit。具体选哪个,取决于你项目使用的是老式 sln 还是新式 slnx,以及你是否用 Dev Kit 的额外功能。装完superpowers之后,脚本还会把用户设置里的一些配置项写进去,这个下面在配置部分详细展开。
3.3 如何快速确认 superpowers 已激活
装完之后最容易产生的错觉就是“好像没变化”。因为 superpowers 不会在状态栏增加什么显眼的图标。我自己的验证流程是这样:
第 1 步:在任意 .cs 文件里输入一个简单的类,比如:
public class TestClass { private int _value; }第 2 步:光标移动到_value字段上,按 Ctrl+.。如果 superpowers 正常工作,弹出的代码操作菜单里应该能看到“Create property from field”“Create auto property”之类的条目。
第 3 步:如果没有这些条目,说明扩展没完全激活。这时打开输出面板,下拉框里选择 “Superpowers” 或 “C#” 日志,看有没有异常堆栈。根据我遇到的情况,绝大多数问题都能在日志里找到答案。
这个验证方法比单纯看扩展列表可靠多了,因为扩展装了不代表它成功加载了分析器。
4. 核心配置与实操要点
4.1 必须了解的配置项
superpowers 提供了一系列配置项,用来控制哪些代码修复和重构操作可以出现在菜单里。默认配置适合大多数场景,但我建议至少过一遍。比较核心的配置包括:
superpowers.analyzerDisabled:控制是否启用内置分析器。默认是 false,也就是开启。官方分析器包含很多检测项,比如建议使用模式匹配、建议使用 switch 表达式、检测多余的类型限定符等。superpowers.codeFixDisabled:控制是否启用代码修复。如果你只想保留重构操作,可以把这个设为 true。superpowers.refactoringDisabled:控制是否启用重构操作。如果你只想保留分析和代码修复,可以把这个设为 true。superpowers.documentationComments.enabled:控制是否启用 XML 文档注释生成功能。这一项非常建议开启,尤其是写公共 API 的时候。
这些配置在 VS Code 的 settings.json 里直接写就行。它会自动合并扩展提供的默认值。
4.2 一个可直接复用的 settings.json 示例
下面是我在自己开发环境里用的配置,以 close 到绝大多数项目的需要为准:
{ "superpowers.analyzerDisabled": false, "superpowers.codeFixDisabled": false, "superpowers.refactoringDisabled": false, "superpowers.documentationComments.enabled": true, "superpowers.quickFixDisabled": false, "editor.codeActionsOnSave": { "source.fixAll.superpowers": true } }需要说明的是,editor.codeActionsOnSave这个是让 superpowers 的代码修复在保存时自动执行的。第一次用可能不太习惯,因为保存瞬间会改动好几处代码,但适应之后会觉得很省心。如果团队有严格的代码格式化规范,这一点尤其有用,等于给保存操作挂上了一个自定义的静态分析修复器。
4.3 分析器开关与代码修复的选择策略
很多人把所有分析器全开,结果代码里一片绿色波浪线,然后觉得这个扩展太吵。实际上,合理做法是根据项目阶段做取舍。
新项目阶段:可以全开,让分析器帮你养成好习惯,比如优先用模式匹配而不是老式 if + is 检查,减少可空警告,等等。这个阶段代码量小,修起来不太费劲。
维护老项目阶段:建议只保留部分高频修复,把一些大范围的风格建议关掉。否则你打开一个一千行的旧文件,可能看到十几条建议,无从下手。具体方法是把对应分析器的 severity 在 .editorconfig 里设成 none。
比如,可能你不想看到“使用显式元组名称”的建议,那就在 .editorconfig 里设置:
dotnet_diagnostic.SUPER2029.severity = none具体诊断编号你需要从输出面板或者错误列表里看,每条分析器警告都有自己的 ID。这个思路同样适用于默认的 Roslyn 分析器。灵活配置优先级,比吭哧吭哧改几百个警告要高效得多。
4.4 增量生成器与调试配置
superpowers 有一个很特别的能力:它能在 VS Code 里调试增量生成器。这对很多人来说是刚需,因为以前要调试 Source Generator,基本上离不开 Visual Studio 的特定调试流程,在 VS Code 里很麻烦。
它通过内置的调试适配器,让断点可以命中生成器代码。具体使用你需要在 launch.json 里配置一个自定义调试会话。大概的配置片段是这样:
{ "type": "superpowers", "request": "launch", "name": "Debug Superpowers Generator" }然后打开一个引用了该生成器的项目,调试时就能在生成器的 Execute 方法里命中断点。由于生成器代码是在编译期间运行的,断点触发的时机和普通应用断点不太一样,需要有点耐心。我第一次设置时,折腾了半天发现断点没命中,最后发现是项目没有重新构建,生成器压根没被拉起。所以记得每次修改生成器代码后,先构建一次,再启动调试。
4.5 与其他 C# 扩展的共存问题
VS Code 里的扩展生态,稍不注意就会互相踩脚。比如超级常用的 “C# Extensions” 负责创建类文件和生成构造函数,这可能会和 superpowers 的部分功能重合。我的经验是关掉你不常用的那一方的对应功能,别让两个扩展同时提示差不多的操作。
举例:如果你习惯用 “C# Extensions” 的生成构造函数,那 superpowers 的构造函数生成建议你可以在设置里关掉。
另外,如果你装了 “Roslynator” 或者其他 Roslyn 分析器扩展,也要注意它们和 superpowers 的分析器可能会有权重冲突。这种冲突一般不会报错,但会在同一个操作上重复出现两个来源,导致菜单很长,影响操作效率。我个人的习惯是二选一,主力用 superpowers,就不装 Roslynator 了,避免重复。
5. 实操过程与核心环节实现
5.1 场景一:用“提取方法”重构大函数
我举个实际重构的例子。假设你有一段很长的函数,里面既有参数校验、核心逻辑又有日志记录,你想把日志记录部分抽成一个单独方法。
传统做法是自己新建方法,然后复制粘贴,还要注意变量作用域,容易漏掉参数。在 superpowers 里,你只需这样操作:
- 选中要提取的代码块。
- 按 Ctrl+.,在菜单里选择 “Extract method”。
- 在弹出的输入框里给方法起名。
- 扩展会自动分析选中代码里使用了哪些局部变量,哪些是只读,哪些需要返回值,然后生成对应方法调用。
这个功能之所以好用,是它做了变量依赖分析。如果你选中片段里有一个变量在片段之后还被用到,它会自动把那个变量作为返回值;如果同时有多个这类变量,它还会自动生成一个元组返回。这些细节手工处理最容易出错,机器生成省心得多。
5.2 场景二:批量生成属性通知
在 WPF 或 MVVM 项目里,INotifyPropertyChanged 的样板代码是逃不掉的。我经常写这样的字段:
private string _name;然后希望生成:
public string Name { get => _name; set => SetProperty(ref _name, value); }在 superpowers 中,你只需要把光标放在_name字段上,打开代码操作列表,选择 “Create property with change notification”。它自动识别字段名和下划线前缀,并生成规范属性。如果你已经在基类里实现了 SetProperty 或者 PropertyChanged 模式,它也会自动适应。实测下来,这个功能比手写模板和代码片段都要快,尤其是在有大量 DTO 和 VM 需要处理的时候。
5.3 场景三:为公共 API 生成 XML 文档注释
团队要求公共方法必须有 XML 注释的时候,逐个手写确实很枯燥。superpowers 的 XML 文档生成功能,可以直接根据方法签名生成带有 param 和 returns 的骨架:
/// <summary> /// /// </summary> /// <param name="id"></param> /// <returns></returns> public bool DeleteItem(int id) { ... }当你把光标停在方法上,或者直接在方法上方输入///,它会自动生成这个结构。这个功能对文档规范很严格的项目特别友好,能少打很多字。唯一需要注意的是,它生成的是英文占位骨架,中文注释内容还需要自己补全。如果你已经安装了 VS 的 “IntelliCode for C#” 扩展,两者配合起来效果更好,它还会在生成时尝试根据上下文补全 summary 的内容。
5.4 场景四:利用原子操作提升保存效率
前面提到source.fixAll.superpowers,实际操作中我还习惯绑定一组保存时操作,比如排序 using、格式化文档、执行 superpowers 修复。这三个可以一起在 settings.json 里配置:
"editor.codeActionsOnSave": { "source.sortImports": true, "source.formatDocument": true, "source.fixAll.superpowers": true }这是一套非常顺手的组合。保存一次,代码的 using 顺序正常了、格式正常了、该修的简单问题也修了。刚开始可能有点不适应,因为有时候只是按了一下 Ctrl+S,看着代码自己动了好几处,会有一种“不太受控”的感觉。用习惯之后,你就再也回不去了,尤其是在有严格的代码风格要求的项目里,等于把代码风格检查的挺多压力交给编辑器自动消化了。
5.5 从项目组角度配置统一的 .editorconfig
superpowers 支持通过 .editorconfig 来微调分析器行为。如果你想在团队里统一体验,建议在 .editorconfig 里显式声明哪些分析器启用、哪些关闭,不要只靠个人 settings.json。这样新成员拉取代码之后,分析器行为自动一致。
比如一个团队想把 “使用 switch 表达式” 设成 suggestion,而另一个团队想直接禁止,配置方式都是:
dotnet_diagnostic.SUPER1001.severity = none或者
dotnet_diagnostic.SUPER1001.severity = suggestion这里的 ID 需要你在编辑器里的错误列表或者输出面板中确认。每台机器的具体 ID 可能因版本而异,但配置思路是通用的。在团队项目里我特别推荐把这一层配置做扎实,因为它是和代码一起进版本库的,不会因为某个人重新安装 VS Code 就丢失。
6. 常见问题与排查技巧实录
6.1 安装后没有代码操作提示
这是我被问得最多的问题。大概率原因不是扩展失效,而是项目没被正确加载。检查步骤:
- 确认你打开的是一个文件夹,里面包含 .csproj 或 .sln 文件,而不是孤立地打开单个 .cs 文件。虽然 superpowers 在某些情况下也支持无项目文件的 C# 文件,但操作会大打折扣。
- 打开输出面板,看 C# / OmniSharp 相关日志是否提示加载完成。
- 关闭并重新打开 VS Code,如果用的是 C# Dev Kit,可能需要重新加载工作区。
如果以上都做了,还是没反应,再检查默认代码操作快捷键是否和别的扩展冲突。比如有人把 Ctrl+. 绑定给了别的插件,那很可能你按快捷键弹出来的是别的菜单。可在快捷键设置里搜索triggerSuggest或editor.action.quickFix,确认绑定是否为默认。
6.2 部分代码修复执行后代码格式乱掉
这种情况遇到过几次,一般发生在生成属性或者提取方法之后,代码缩进或大括号风格变得和项目格式不一致。原因多半是项目里配了 .editorconfig,而 superpowers 生成的代码没有完全遵循其中的命名规范或格式规则,或者生成的代码块使用了默认格式。
我的经验是:先确认 .editorconfig 里的indent_size、csharp_new_line_before_open_brace这些规则有没有被正确识别。如果 .editorconfig 生效正常,但生成的代码还是不对,可以手动执行一次格式化文档命令:
- 按 Shift+Alt+F 或右键选 “Format Document”。
- 如果格式化后正常了,后续生成操作再检查一遍也没关系。
需要提醒的是,superpowers 毕竟是通用扩展,它不能保证生成的代码和每个团队的专有风格完全一致。格式问题优先靠编辑器格式化解决,不要因此放弃它的重构功能。
6.3 分析器报出和公司规范冲突的建议
比如公司规范禁止使用某些语言特性,而 superpowers 内置分析器可能恰恰建议你使用这些特性。这个不是 bug,是分析器配置的问题。处理方式很简单:在 .editorconfig 里关掉对应的诊断项即可。
建议先在代码里打开错误列表,找到那条分析器建议,记下 ID,然后在 .editorconfig 里置为 none。不要直接在 settings.json 里全局禁用所有分析器,那样会丢掉本来有用的建议。更不要按 Alt+Enter 挨个忽略,那样治理成本太高,团队协作也很难一致。
6.4 和 C# Dev Kit 的加载顺序冲突
Dev Kit 和 superpowers 本身不冲突,但如果你发现安装后 Dev Kit 的项目加载变得特别慢,或者自带的“依赖”提示一直转圈,可能是两个扩展同时做代码分析的资源争夺。这种场景下,我建议做一次扩展性能排查:
- 先禁用 superpowers,重载窗口,看项目加载速度是否恢复正常。
- 如果恢复了,说明是资源竞争。可以尝试更新 C# Dev Kit 到最新版本,因为它对第三方分析器的兼容性一直在做改进。
- 如果还不行,启用 superpowers 但关掉部分重量级分析器,或者把工作区拆成更小的项目,也能缓解。
这个问题的根源在于现代 IDE 都是多进程架构,扩展各自持有 Roslyn 层的信息,协调不好就会拉高内存和 CPU。不必追求一个完美配置,重点是找到你能接受的那个平衡点。
6.5 版本升级后突然失效
扩展升级后功能突然消失,通常不是回退版本那么简单。检查:
- 看 VS Code 版本是否被自动升级到不兼容的新版。
- 看 C# 扩展是否也需要一起升级。
- 读一下扩展的输出日志,看是否有加载失败报错。
有一次我遇到所有代码操作消失,最后发现是 C# Dev Kit 自动更新后需要重新同意“信任工作区”。虽然听起来和 superpowers 无关,但 Dev Kit 的信任机制卡住后,整个 C# 语言服务都停摆,所有依赖语言服务的扩展都会失效。所以扩展失效时的排查思路要打开,不要只盯着 superpowers 本身。
6.6 排查问题时的通用速查表
我把遇到过的典型问题整理成一个速查表,方便排查时对照:
| 症状 | 常见原因 | 快速验证与解决 |
|---|---|---|
| 代码操作菜单为空 | 项目未加载或快捷键冲突 | 检查 C# 日志,重新加载窗口 |
| 保存时自动修复不生效 | settings.json 配置错误 | 确认 codeActionsOnSave 语法正确 |
| 部分分析器建议缺失 | SDK 版本过旧或项目框架过旧 | 升级 SDK,检查 .editorconfig |
| 生成代码格式乱 | .editorconfig 规则未完全识别 | 手动格式化文档或调整 .editorconfig |
| 项目加载极慢 | 扩展资源竞争 | 临时禁用部分分析器排查 |
| 升级后无响应 | 语言服务信任状态被重置 | 重新信任工作区,更新相关扩展 |
这张表是我踩坑后的浓缩版,基本覆盖了大部分异常情况。真碰上新问题,首要动作永远是看输出面板和扩展日志,里面一般会给出明确的错误线索。
7. 一些值得留意的功能边界
7.1 superpowers 内置分析器的覆盖面
它的内置分析器不是要把所有 Roslyn 分析器都塞给你,而是聚焦了几类高频改进场景。比如:
- 推荐模式匹配而不是传统的
is + cast。 - 推荐
switch表达式而不是老式switch语句。 - 检测冗余的类型限定符和多余的 using。
- 推荐使用可空引用类型相关的新写法。
特点是比较克制,确实比一些“全家桶”分析器要好用,因为不会动不动给你整一堆提示。但也正因如此,它不承担全量代码风格治理的任务。如果你的目标是全项目规范扫描,我建议搭配 .NET 自带的 .NET Analyzers 一起用。
7.2 与经典重构工具的异同
很多从 ReSharper 转过来的人会问,它能不能替代 ReSharper?我的回答是,在 VS Code 场景里它能替代掉相当一部分高频重构需求,但 ReSharper 的家大业大,包括导航、单元测试运行、代码模板、连续按 Alt+Enter 的极速体验,它做不到。如果你真的重度依赖 ReSharper,可能还是继续用 Visual Studio 更舒服;但如果你的目标是轻量开发,superpowers 已经覆盖了核心的 80% 场景。
7.3 在 Unity 项目里的特殊配置
用 VS Code 开发 Unity 项目时,情况有点特殊。Unity 生成的 csproj 文件经常被修改或重新生成,这会导致扩展的上下文丢失。我自己的做法是:
- 在 Unity 的 External Tools 设置里,把 “Generate .csproj files” 勾选上。
- 每次从 Unity 回到 VS Code 时,如果发现操作菜单异常,先重新加载窗口。
- 不要把 superpowers 的保存时自动修复开得太猛,因为 Unity 生成的文件可能包含很多它不认识的初始化代码,自动修复可能改动到不该碰的区域。
Unity 项目里推荐保持分析器开核心项,关掉风格建议,以免干扰美术和策划人员打开的编辑器界面。
7.4 ASP.NET Core 项目中的建议
在 ASP.NET Core 项目里,superpowers 最有用的场景是 Controllers 和 Services 层,尤其是 DTO 类的字段转属性、构造函数参数提取。配合 minimal API 项目,它能快速生成 record 类型的一些成员。我自己在写 Web API 时,大量使用它的“创建构造器参数分配属性”功能,省了不少重复劳动。
需要注意的是,ASP.NET Core 项目经常有多目标框架,如果分析器加载报错,检查一下项目的 TargetFrameworks。某些旧的分析器版本可能对 net6.0 支持好,但对 net8.0 就有点跟不上。保持扩展和 SDK 双新,是减少兼容性麻烦的最直接手段。
8. 写在最后的体验与建议
8.1 日常使用中的个人体会
用 superpowers 这一年多,最大的感受是它改变了我对 VS Code 和 C# 的配合关系的认知。以前总觉得 VS Code 写 C# 就是“凑合能用”,生产力和 Visual Studio 差一大截。但实际把这个扩展调顺之后,大部分日常开发操作都在 VS Code 里顺畅完成了,无需频繁切换 IDE。
尤其是团队里有人用 VS 有人用 VS Code 的时候,代码操作的一致性能减少不少摩擦。基于项目的 .editorconfig 统一分析器行为之后,两边看到的警告和建议基本一致,这比统一 IDE 要实际得多。
8.2 根据我的经验,给新手的几个建议
第一条:安装依赖别偷懒。C# Dev Kit 或老 C# 扩展必须装,且要等它完全加载后再用 superpowers。很多人遇到“没有反应”的第一反应就是卸载重装,其实大概率是依赖没就绪。
第二条:第一次配置不要全盘照搬别人的。先默认用几天,记录下你最高频的痛点,再针对性地开相应功能。比如你不写 WPF,就完全不用管属性通知生成器;你不写公共库,XML 注释功能可以先关掉。
第三条:遇到问题时,日志比猜测有用得多。VS Code 的输出面板是救命稻草,基本能定位 80% 的问题。别再一个扩展一个扩展地禁用重试了,先看日志。
8.3 后续可以继续扩展的方向
如果你已经把 superpowers 的基础能力都用熟了,我建议尝试结合自己团队的自定义分析器。可以参考它的文档,把自己写的 Roslyn 分析器注册进 VS Code 环境,这样你和团队的分析器逻辑从命令行到 IDE 都能保持一致。也可以把它和 CI 构建中的dotnet format做对照,看看保存时自动修复的结果和命令行格式化的结果有哪些差异,再回头调整 .editorconfig,逐步达到两边一致。
还有一个小技巧,如果你写了不少自定义的代码片段(snippet),可以试着把 superpowers 的代码操作关联到自定义快捷键上。比如给“提取方法”绑定一个单独的键位,这样用起来更顺手,连 Ctrl+. 的菜单都不用调出来。设置方法是在快捷键配置里搜索对应命令 ID,然后把 keybinding 改成你想要的方式。
工具这东西,上手不难,但真正用出效率还是需要一段时间的磨合。superpowers 也不例外,初期装完你可能觉得“也就这样”,但当你习惯了那些随手可得的重构操作之后,大概就很难再退回没有它的日子了。