Compartir vía


CA1505: Evitar código que no se puede mantener

Propiedad Value
Identificador de la regla CA1505
Título Evitar código que no se puede mantener
Categoría Capacidad de mantenimiento
La corrección es problemática o no problemática Poco problemático
Umbral predeterminado 10
Habilitado de forma predeterminada en .NET 8 No

Causa

Un tipo, método, campo, propiedad o evento tiene un valor de índice de mantenimiento bajo.

Descripción de la regla

La regla notifica una infracción cuando el índice de mantenimiento de un tipo, método, campo, propiedad o evento es inferior a 10. Sin embargo, puede configurar el umbral.

El índice de mantenimiento se calcula con las siguientes métricas: líneas de código, volumen de programa y complejidad ciclomática. (El volumen de programa es una medida de la dificultad de comprender un tipo o un método basado en el número de operadores y operandos del código. La complejidad ciclomática es una medida de la complejidad estructural del tipo o método). Puede obtener más información sobre las métricas del código en Cálculo de la complejidad y el mantenimiento del código administrado.

Un índice de mantenimiento bajo indica que un tipo o método resulta probablemente difícil de mantener y se debería volver a diseñar.

Cómo corregir infracciones

Para corregir esta infracción, vuelva a diseñar el tipo o método e intente dividirlo en tipos o métodos más pequeños y más centrados.

Cuándo suprimir las advertencias

Puede suprimir esta advertencia cuando el tipo o el método no se pueden dividir o se consideran mantenibles a pesar de su gran tamaño.

Nota

Es posible que vea advertencias de falsos positivos de esta regla si se aplica todo lo siguiente:

  • Está usando Visual Studio 2022, versión 17.5 o posterior, con una versión anterior del SDK de .NET, es decir, .NET 6 o una anterior.
  • Está usando los analizadores del SDK de .NET 6 o una versión anterior de los paquetes del analizador, como Microsoft.CodeAnalysis.FxCopAnalyzers.

Los falsos positivos se deben a un cambio importante en el compilador de C#. Considere la posibilidad de usar un analizador más reciente que incluya la corrección de las advertencias de falsos positivos. Actualice a Microsoft.CodeAnalysis.NetAnalyzers, versión 7.0.0-preview1.22464.1 o posterior, o bien use los analizadores del SDK de .NET 7.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Configuración del umbral

Puede configurar el umbral en el que se activa esta regla y los tipos de símbolos que se van a analizar. Los tipos de símbolos permitidos son:

  • Assembly
  • Namespace
  • Type
  • Method
  • Field
  • Event
  • Property
  1. Cree un archivo de texto denominado CodeMetricsConfig.txt.

  2. Agregue el umbral deseado al archivo de texto con el formato siguiente:

    CA1505: 20
    

    En este ejemplo, la regla se configura para activarse cuando el índice de mantenimiento de un tipo, método, campo, propiedad o evento es inferior a 20.

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

    En este ejemplo, la regla se configura para activarse cuando el índice de mantenimiento de un método es inferior a 5 o el índice de mantenimiento de un tipo es inferior a 15. Con este archivo de configuración, la regla seguirá marcando campos, propiedades y eventos cuyo índice de mantenimiento sea menor que el umbral predeterminado (10).

  3. En el archivo del proyecto, marque la acción de compilación del archivo de configuración como AdditionalFiles. Por ejemplo:

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

Consulte también