CA1505:避免使用无法维护的代码

属性
规则 ID CA1505
标题 避免使用无法维护的代码
类别 可维护性
修复是中断修复还是非中断修复 非中断
默认阈值 10
在 .NET 8 中默认启用

原因

类型、方法、字段、属性或事件的可维护性索引值较低。

规则说明

当类型、方法、字段、属性或事件的可维护性索引小于 10 时,规则将报告冲突。 但是,你可以配置阈值

可维护性指数通过使用以下度量进行计算:代码行、程序量和圈复杂度。 (程序量是基于代码中的运算符和操作数数量来理解类型或方法的难度的度量值。 圈复杂度是类型或方法的结构化复杂度的度量值。 可以在衡量托管代码的复杂性和可维护性中了解有关代码度量的详细信息。

如果可维护性指数较低,则表示类型或方法可能难以维护,最好重新进行设计。

如何解决冲突

若要解决此冲突,请重新设计类型或方法,并尝试将其拆分为更小、更有针对性的类型或方法。

何时禁止显示警告

如果类型或方法无法拆分或被视为可维护(尽管其非常大),可禁止显示此警告。

注意

如果满足以下所有条件,你可能会看到来自此规则的误报警告:

  • 你将 Visual Studio 2022 版本 17.5 或更高版本与旧版 .NET SDK(即 .NET 6 或更低版本)配合使用。
  • 你使用的是 .NET 6 SDK 中的分析器或较旧版本的分析器包,例如 Microsoft.CodeAnalysis.FxCopAnalyzers。

误报是由于 C# 编译器中的中断性变更造成的。 请考虑使用更新的包含误报警告修补程序的分析器。 升级到 Microsoft.CodeAnalysis.NetAnalyzers 版本 7.0.0-preview1.22464.1 或更高版本,或使用 .NET 7 SDK 中的分析器。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

#pragma warning disable CA1505
// The code that's violating the rule is on this line.
#pragma warning restore CA1505

若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none

[*.{cs,vb}]
dotnet_diagnostic.CA1505.severity = none

有关详细信息,请参阅如何禁止显示代码分析警告

配置阈值

可以配置此规则触发的阈值以及要分析的符号类型。 允许的符号类型包括:

  • Assembly
  • Namespace
  • Type
  • Method
  • Field
  • Event
  • Property
  1. 创建名为 CodeMetricsConfig.txt 的文本文件。

  2. 按以下格式将所需的阈值添加到文本文件中:

    CA1505: 20
    

    在此示例中,规则配置为在类型、方法、字段、属性或事件的可维护性索引小于 20 时触发。

    CA1505(Method): 5
    CA1505(Type): 15
    

    在此示例中,规则配置为在方法的可维护性索引小于 5 或类型的可维护性索引小于 15 时触发。 使用此配置文件,规则将继续标记其可维护性索引小于默认阈值 (10) 的字段、属性和事件。

  3. 在项目文件中,将配置文件的生成操作标记为 AdditionalFiles。 例如:

    <ItemGroup>
      <AdditionalFiles Include="CodeMetricsConfig.txt" />
    </ItemGroup>
    

另请参阅