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
Zalecana akcja
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
nafalse
w pliku projektu. Aby uzyskać więcej informacji, zobacz EnableNETAnalyzers.
Dotyczy interfejsów API
Nie można wykryć za pośrednictwem analizy interfejsu API.