CA1505: evitare codice non manutenibile

Proprietà valore
ID regola CA1505
Titolo Evitare codice non gestibile
Categoria Gestibilità
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Soglia predefinita 10
Abilitato per impostazione predefinita in .NET 8 No

Causa

Un tipo, un metodo, un campo, una proprietà o un evento ha un valore di indice di manutenibilità basso.

Descrizione regola

La regola segnala una violazione quando l'indice di gestibilità di un tipo, un metodo, un campo, una proprietà o un evento è minore di 10. Tuttavia, è possibile configurare la soglia.

L'indice di gestibilità viene calcolato usando le metriche seguenti: righe di codice, volume del programma e complessità ciclomatica. Il volume del programma è una misura della difficoltà di comprensione di un tipo o di un metodo basato sul numero di operatori e operandi nel codice. La complessità ciclomatica è una misura della complessità strutturale del tipo o del metodo. Per altre informazioni sulle metriche del codice, vedere Misurare la complessità e la gestibilità del codice gestito.

Un indice di manutenibilità basso indica che un tipo o un metodo è probabilmente difficile da gestire e sarebbe un buon candidato per la riprogettazione.

Come correggere le violazioni

Per correggere questa violazione, riprogettare il tipo o il metodo e provare a suddividerlo in tipi o metodi più piccoli e più mirati.

Quando eliminare gli avvisi

È possibile eliminare questo avviso quando il tipo o il metodo non può essere diviso o è considerato gestibile nonostante le dimensioni elevate.

Nota

Se si applicano tutti gli avvisi seguenti, è possibile che vengano visualizzati avvisi falsi positivi da questa regola:

  • Si usa Visual Studio 2022 versione 17.5 o successiva con una versione precedente di .NET SDK, ovvero .NET 6 o versioni precedenti.
  • Si usano gli analizzatori di .NET 6 SDK o una versione precedente dei pacchetti analizzatori, ad esempio Microsoft.CodeAnalysis.FxCopAnalyzers.

I falsi positivi sono dovuti a una modifica che causa un'interruzione nel compilatore C#. Prendere in considerazione l'uso di un analizzatore più recente che contiene la correzione per gli avvisi falsi positivi. Eseguire l'aggiornamento a Microsoft.CodeAnalysis.NetAnalyzers versione 7.0.0-preview1.22464.1 o successiva o usare gli analizzatori di .NET 7 SDK.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

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

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Configurare la soglia

È possibile configurare la soglia in corrispondenza della quale viene attivata questa regola e i tipi di simboli da analizzare. I tipi di simboli consentiti sono:

  • Assembly
  • Namespace
  • Type
  • Method
  • Field
  • Event
  • Property
  1. Creare un file di testo denominato CodeMetricsConfig.txt.

  2. Aggiungere la soglia desiderata al file di testo nel formato seguente:

    CA1505: 20
    

    In questo esempio la regola viene configurata per l'avvio quando l'indice di gestibilità di un tipo, un metodo, un campo, una proprietà o un evento è minore di 20.

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

    In questo esempio la regola viene configurata per l'avvio quando l'indice di gestibilità di un metodo è minore di 5 o l'indice di gestibilità di un tipo è minore di 15. Con questo file di configurazione, la regola continuerà a contrassegnare campi, proprietà ed eventi il cui indice di gestibilità è inferiore alla soglia predefinita (10).

  3. Nel file di progetto contrassegnare l'azione di compilazione del file di configurazione come AdditionalFiles. Ad esempio:

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

Vedi anche