Udostępnij za pośrednictwem


Ostrzeżenie CA2200: Przeróć, aby zachować szczegóły stosu

Reguła analizatora kodu platformy .NET CA2200 jest domyślnie włączona, począwszy od platformy .NET 5. Tworzy ostrzeżenie kompilacji dla wszystkich catch bloków, które ponownie wrócą wyjątek, a wyjątek jest jawnie określony w instrukcji throw .

Opis zmiany

Począwszy od platformy .NET 5, zestaw .NET SDK zawiera analizatory kodu źródłowego platformy .NET. Kilka z tych reguł jest domyślnie włączonych, w tym CA2200. Jeśli projekt zawiera kod, który narusza tę regułę i jest skonfigurowany do traktowania ostrzeżeń jako błędów, ta zmiana może spowodować przerwanie kompilacji.

Reguła CA2200 flaguje kod, w którym wyjątki są zmieniane, a zmienna wyjątku jest określona w instrukcji throw . Gdy zgłaszany jest wyjątek, część informacji, które prowadzi, to ślad stosu. Ślad stosu to lista hierarchii wywołań metody rozpoczynająca się od metody, która zgłasza wyjątek i kończy się metodą, która przechwytuje wyjątek. Jeśli wyjątek zostanie ponownie zgłoszony przez określenie wyjątku throw w instrukcji, ślad stosu zostanie uruchomiony ponownie w bieżącej metodzie i lista wywołań metod między oryginalną metodą, która zwróciła wyjątek i bieżącą metodę zostanie utracona. Aby zachować oryginalne informacje śledzenia stosu z wyjątkiem, użyj throw instrukcji bez określania wyjątku.

Poniższy fragment kodu nie generuje ostrzeżenia dla reguły CA2200. Skomentowana linia wyzwoli jednak naruszenie.

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

Wprowadzona wersja

5,0

  • Wróć wyjątki bez jawnego określenia wyjątku. Aby uzyskać więcej informacji, zobacz CA2200.

  • Aby całkowicie wyłączyć analizę kodu, ustaw wartość EnableNETAnalyzers na false w pliku projektu. Aby uzyskać więcej informacji, zobacz EnableNETAnalyzers.

Dotyczy interfejsów API

Nie można wykryć za pośrednictwem analizy interfejsu API.