批量修复警告Skill fix-warnings

此技能用于批量修复 .NET 项目中的分析器警告,支持按类别过滤、预览模式和交互式审查选项。通过自动化代码修复,提升代码质量,减少手动干预,适用于开发流程中的代码维护和测试阶段。关键词:.NET、代码分析、警告修复、自动化、代码质量、DevOps、测试工具。

测试 0 次安装 0 次浏览 更新于 3/11/2026

名称: 修复警告 描述: 通过类别过滤和交互式审查选项批量修复分析器警告 参数提示: “[–category <cat>] [–preview] [–interactive] [–project <名称>]” 允许工具: Bash, Read, Edit, Glob, Grep, AskUserQuestion

/dotnet:修复警告

通过类别过滤、预览模式和交互式审查选项批量修复分析器警告。

参数

$ARGUMENTS 解析参数:

标志 描述 默认值
--category <cat> 修复特定类别(见下文) 所有可修复
--severity <level> 最低严重性(错误、警告、建议、隐藏) 警告
--preview 显示更改但不应用 false
--interactive 应用前审查每个修复 false
--project <path> 目标特定项目(模糊匹配) 所有项目

警告类别

类别 描述 分析器前缀
style 代码风格 (IDE*) IDE0001-IDE0999
quality 代码质量 (CA*) CA1000-CA9999
naming 命名约定 CA1700-CA1727, IDE1006
performance 性能问题 CA1800-CA1869
security 安全关切 CA2100-CA2399, CA3000-CA3147
reliability 可靠性问题 CA2000-CA2099
usage API 使用问题 CA2200-CA2249
nullable 可空引用警告 CS8600-CS8799
async 异步/等待问题 CA2007, CA2008, CS8892

工作流程

步骤 1: 运行分析器

构建并显示详细诊断信息:

dotnet build --no-incremental -warnaserror:0 2>&1

或使用格式命令获取可修复警告:

dotnet format analyzers --verify-no-changes --verbosity diagnostic

步骤 2: 解析和分类警告

按以下分组警告:

  • 类别(风格、质量、命名等)
  • 严重性(错误、警告、建议)
  • 文件位置
  • 可修复性(自动修复 vs 手动)

步骤 3: 呈现摘要

分析器警告摘要

  类别          计数   自动修复数
  ─────────────────────────────────────
  风格           42      38
  质量           15      8
  命名           7       7
  可空           23      12
  性能           3       1
  ─────────────────────────────────────
  总计           90      66

受影响的文件:28

使用 --preview 查看具体警告。
不使用标志以修复所有自动修复警告。

步骤 4: 预览模式 (–preview)

显示将更改的内容:

预览:待修复的警告

IDE0008(风格):使用显式类型替代 'var'(12 次出现)
  - src/MyApp/Services/UserService.cs:42
  - src/MyApp/Services/UserService.cs:56
  - src/MyApp/Controllers/ApiController.cs:23
  ... 以及 9 个更多

CA1062(质量):验证公共方法的参数(5 次出现)
  - src/MyApp/Services/DataService.cs:18
  - src/MyApp/Handlers/CommandHandler.cs:31
  ... 以及 3 个更多

CS8618(可空):非空字段未初始化(8 次出现)
  - src/MyApp/Models/User.cs:12
  - src/MyApp/Models/Order.cs:8
  ... 以及 6 个更多

总计:66 个自动修复警告,跨越 28 个文件

不使用 --preview 以应用修复。

步骤 5: 应用修复

自动模式(默认):

# 修复所有风格警告
dotnet format style

# 修复所有分析器警告
dotnet format analyzers

# 修复空白
dotnet format whitespace

类别特定:

# 仅修复命名警告
dotnet format analyzers --diagnostics=CA1700,CA1707,CA1708,CA1710,CA1711,CA1712,CA1713,CA1714,CA1715,CA1716,CA1717,CA1720,CA1721,CA1724,CA1725,CA1727,IDE1006

交互模式 (–interactive):

对于每个警告类别:

修复 IDE0008:使用显式类型替代 'var'?(12 次出现)

示例:
  之前:var service = new UserService();
  之后:UserService service = new UserService();

选项:
  1. 修复所有 12 次出现
  2. 跳过此规则
  3. 逐一审查每个出现

步骤 6: 验证

修复后:

dotnet build --no-restore

报告由修复引入的任何问题。

输出格式

摘要模式(无标志):

修复分析器警告中...

已应用的修复:
  风格(IDE*):      38 个警告已修复
  质量(CA*):       8 个警告已修复
  命名:             7 个警告已修复
  可空:             12 个警告已修复

剩余(不可自动修复):
  CA1062:  5 个警告 - 验证参数(需手动审查)
  CA2000:  3 个警告 - 处理对象(需手动审查)
  CS8604:  11 个警告 - 可能的空引用(上下文相关)

修改的文件:28
构建:成功

使用 --category 修复特定类别。
手动审查剩余警告或用理由抑制。

交互模式:

交互式修复警告

[1/5] IDE0008:使用显式类型(12 次出现)
  全部修复?[Y/n/s(kip)/r(eview)]
  > Y
  已修复 12 次出现

[2/5] CA1707:移除成员名称中的下划线(3 次出现)
  全部修复?[Y/n/s(kip)/r(eview)]
  > r

  1. _myField -> MyField 在 User.cs:15
     修复?[y/n] > y

  2. Get_Data() -> GetData() 在 DataService.cs:42
     修复?[y/n] > n(跳过 - 意图约定)

  3. API_VERSION -> ApiVersion 在 Constants.cs:8
     修复?[y/n] > y

  已修复 2 次,共 3 次出现

...(为每个类别继续)

摘要:
  已修复:52 个警告
  已跳过:14 个警告(用户选择)

构建:成功

常见警告修复

警告 自动修复 手动操作
IDE0008 var 改为显式类型
IDE0003 移除 this. 限定
IDE0059 移除不必要的赋值
CA1062 部分 添加空检查(上下文相关)
CA2000 添加 using.Dispose() 调用
CS8618 部分 添加 = null!required
CA1707 移除下划线
CA1716 重命名以避免关键字冲突

示例

# 修复所有自动修复警告
/dotnet:修复警告

# 预览而不修复
/dotnet:修复警告 --preview

# 仅修复风格警告
/dotnet:修复警告 --category style

# 仅修复命名问题
/dotnet:修复警告 --category naming

# 交互模式 - 审查每个修复
/dotnet:修复警告 --interactive

# 修复特定项目中的警告
/dotnet:修复警告 --project MyApp.Api

# 仅修复错误和警告(跳过建议)
/dotnet:修复警告 --severity warning

不可自动修复的警告

一些警告需要手动审查:

  • CA2000(处理):上下文相关的对象生命周期
  • CA1062(空检查):可能需要不同的验证策略
  • CA2007(ConfigureAwait):库 vs 应用决策
  • CS8604(空流):可能需要设计更改

对于这些,命令报告它们但不修改代码。

与 .editorconfig 集成

遵循 .editorconfig 设置:

# 这些规则将在修复期间应用
dotnet_style_var_for_built_in_types = false:warning
dotnet_naming_rule.public_members_must_be_capitalized.severity = warning