Avviso CA2200: eseguire il rethrow per conservare i dettagli dello stack
La regola CA2200 dell'analizzatore del codice .NET è abilitata, per impostazione predefinita, a partire da .NET 5. Genera un avviso di compilazione per tutti i blocchi catch
che generano nuovamente un'eccezione e l'eccezione viene specificata in modo esplicito nell'istruzione throw
.
Descrizione delle modifiche
A partire da .NET 5, .NET SDK include analizzatori del codice sorgente .NET. Diverse di queste regole sono abilitate, per impostazione predefinita, tra cui CA2200. Se il progetto contiene codice che viola questa regola ed è configurato per considerare gli avvisi come errori, questa modifica potrebbe interrompere la compilazione.
Codice dei flag CA2200 della regola in cui vengono rigenerate le eccezioni e la variabile di eccezione viene specificata nell'istruzione throw
. Quando viene generata un'eccezione, parte delle informazioni che contiene è l'analisi dello stack. L'analisi dello stack è un elenco della gerarchia di chiamate al metodo che inizia con il metodo che genera l'eccezione e termina con il metodo che intercetta l'eccezione. Se un'eccezione viene generata di nuovo tramite la specifica nell'istruzione throw
, l'analisi dello stack viene riavviata nel metodo corrente e l'elenco di chiamate ai metodi tra il metodo originale che ha generato l'eccezione e il metodo corrente viene perso. Per mantenere le informazioni di analisi dello stack originali con l'eccezione, usare l'istruzione throw
senza specificare l'eccezione.
Il frammento di codice seguente non genera un avviso per la regola CA2200. La riga commentata attiva tuttavia una violazione.
catch (ArithmeticException e)
{
// throw e;
throw;
}
Versione di introduzione
5.0
Azione consigliata
Rigenerare le eccezioni senza specificare l'eccezione in modo esplicito. Per altre informazioni, vedere CA2200.
Per disabilitare completamente l'analisi del codice, impostare
EnableNETAnalyzers
sufalse
nel file di progetto. Per altre informazioni, vedere EnableNETAnalyzers.
API interessate
Non rilevabile tramite analisi dell'API.