Partilhar via


Aviso CA2200: Relançar para preservar os detalhes da pilha

A regra CA2200 do analisador de código .NET está habilitada, por padrão, a partir do .NET 5. Ele produz um aviso de compilação para quaisquer catch blocos que relançam uma exceção e a exceção é explicitamente especificada na throw instrução.

Alterar descrição

A partir do .NET 5, o SDK do .NET inclui analisadores de código-fonte do .NET. Várias dessas regras estão habilitadas, por padrão, incluindo CA2200. Se o seu projeto contém código que viola essa regra e está configurado para tratar avisos como erros, essa alteração pode quebrar sua compilação.

A regra CA2200 sinaliza código onde as exceções são relançadas e a variável de exceção é especificada na expressão. Quando uma exceção é lançada, parte das informações que ela carrega é o rastreamento de pilha. O rastreamento de pilha é uma lista da hierarquia de chamada de método que começa com o método que lança a exceção e termina com o método que captura a exceção. Se uma exceção for relançada ao especificar a exceção na throw instrução, o rastreamento de pilha reiniciar-se-á no método atual e perde-se a lista de chamadas de método entre o método original que lançou a exceção e o método atual. Para manter as informações de rastreamento de pilha originais com a exceção, use a throw instrução sem especificar a exceção.

O trecho de código a seguir não produz um aviso para a regra CA2200. No entanto, a linha comentada desencadearia uma violação.

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

Versão introduzida

5.0

  • Relançar exceções sem especificar a exceção explicitamente. Para obter mais informações, consulte CA2200.

  • Para desativar completamente a análise de código, defina EnableNETAnalyzers como false no arquivo de projeto. Para obter mais informações, consulte EnableNETAnalyzers.

APIs afetadas

Não detetável através da análise API.