名称: 修复警告 描述: 通过类别过滤和交互式审查选项批量修复分析器警告 参数提示: “[–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