CA2200 : levez à nouveau une exception pour conserver les détails de la pile

La règle d’analyseur de code .NET CA2200 est activée par défaut à partir de .NET 5. Il génère un avertissement de build pour tous les blocs catch qui lève à nouveau une exception et l’exception est explicitement spécifiée dans l’instruction throw.

Description de la modification

À compter de .NET 5, le Kit de développement logiciel (SDK) .NET inclut des analyseurs de code source .NET. Plusieurs de ces règles sont activées par défaut, y compris CA2200. Si votre projet contient du code qui enfreint cette règle et est configuré pour traiter les avertissements comme des erreurs, ce changement peut casser votre build.

La règle CA2200 signale le code où les exceptions sont à nouveau levées et la variable d’exception est spécifiée dans l’instruction throw. Une fois qu’une exception est levée, une partie des informations qu’elle contient est l’arborescence des appels de procédure. L’arborescence des appels de procédure est une liste de la hiérarchie des appels de méthode qui commence par la méthode qui lève l’exception et se termine par la méthode qui intercepte l’exception. Si une exception est à nouveau levée par sa spécification dans l’instruction throw, l’arborescence des appels de procédure est redémarrée sur la méthode actuelle et la liste des appels de méthode présents entre la méthode d’origine qui a levé l’exception et la méthode actuelle est perdue. Pour conserver les informations sur l’arborescence des appels de procédure d’origine avec l’exception, utilisez l’instruction throw sans spécifier l’exception.

L’extrait de code suivant ne génère pas d’avertissement pour la règle CA2200. Toutefois, la ligne commentée déclencherait une violation.

catch (ArithmeticException e)
{
    // throw e;
    throw;
}

Version introduite

5,0

  • Levez de nouveau les exceptions sans spécifier explicitement l’exception. Pour plus d’informations, consultez CA2200.

  • Pour désactiver complètement l’analyse du code, définissez EnableNETAnalyzers sur false dans votre fichier projet. Pour plus d’informations, consultez EnableNETAnalyzers.

API affectées

Non détectable via l’analyse des API.