CA1506: Avoid excessive class coupling

Property Value
Rule ID CA1506
Title Avoid excessive class coupling
Category Maintainability
Fix is breaking or non-breaking Breaking
Default threshold Types: 95  Other symbols: 40
Enabled by default in .NET 8 No

Cause

A type, method, field, property, or event is coupled with many other types. Compiler-generated types are excluded from this metric.

Rule description

This rule measures class coupling by counting the number of unique type references that a type, method, field, property, or event contains. The default coupling threshold is 95 for types and 40 for other symbol kinds, and the thresholds are configurable.

Types, methods, and other symbols that have a high degree of class coupling can be difficult to maintain. It's a good practice to have types, methods, and other symbols that exhibit low coupling and high cohesion.

How to fix violations

To fix this violation, try to redesign the type or method to reduce the number of types to which it's coupled.

When to suppress warnings

You can suppress this warning when the type or method is considered maintainable despite its large number of dependencies on other types.

Note

You might see false positive warnings from this rule if all of the following apply:

  • You're using Visual Studio 2022 version 17.5 or later with an older version of the .NET SDK, that is, .NET 6 or earlier.
  • You're using the analyzers from the .NET 6 SDK or an older version of the analyzer packages, such as Microsoft.CodeAnalysis.FxCopAnalyzers.

The false positives are due to a breaking change in the C# compiler. Consider using a newer analyzer that contains the fix for the false positive warnings. Upgrade to Microsoft.CodeAnalysis.NetAnalyzers version 7.0.0-preview1.22464.1 or newer or use the analyzers from the .NET 7 SDK.

Suppress a warning

If you just want to suppress a single violation, add preprocessor directives to your source file to disable and then re-enable the rule.

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

To disable the rule for a file, folder, or project, set its severity to none in the configuration file.

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

For more information, see How to suppress code analysis warnings.

Configure threshold

You can configure the threshold at which this rule fires and the kinds of symbols to analyze. The allowable symbol kinds are:

  • Assembly
  • Namespace
  • Type
  • Method
  • Field
  • Event
  • Property
  1. Create a text file named CodeMetricsConfig.txt.

  2. Add the desired threshold to the text file in the following format:

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

    In this example, the rule is configured to fire when a method has more than 60 unique type references or a type has more than 120 unique type references. With this configuration file, the rule will continue to flag fields, properties, and events whose class coupling is greater than the default threshold (40).

  3. In the project file, mark the build action of the configuration file as AdditionalFiles. For example:

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

See also