CA1506:避免过度类耦合度

属性
规则 ID CA1506
标题 避免过度类耦合度
类别 可维护性
修复是中断修复还是非中断修复 重大
默认阈值 类型:95 其他符号:40
在 .NET 8 中默认启用

原因

类型、方法、字段、属性或事件与许多其他类型耦合。 编译器生成的类型不包括在此指标中。

规则说明

此规则通过计算类型、方法、字段、属性或事件包含的唯一类型引用的数量来衡量类耦合。 类型的默认耦合阈值为 95,其他符号类型的默认耦合阈值为 40,阈值可配置

很难维护类耦合度较高的类型、方法和其他符号。 最好拥有低耦合度和高内聚的类型、方法和其他符号。

如何解决冲突

若要解决此冲突,请尝试重新设计类型或方法,以减少其耦合的类型的数量。

何时禁止显示警告

尽管类型或方法对其他类型有很多依赖项,当它被视为可维护时,可以禁止显示此警告。

注意

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

  • 你将 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 CA1506
// The code that's violating the rule is on this line.
#pragma warning restore CA1506

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

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

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

配置阈值

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

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

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

    CA1506(Method): 60
    CA1506(Type): 120
    

    在此示例中,规则配置为在方法具有超过 60 个唯一类型引用或类型具有超过 120 个唯一类型引用时触发。 使用此配置文件,规则将继续标记其类耦合度超过默认阈值 (40) 的字段、属性和事件。

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

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

另请参阅