Udostępnij za pośrednictwem


Reguły niezawodności

Reguły niezawodności obsługują bibliotekę i niezawodność aplikacji, takie jak prawidłowe użycie pamięci i wątków. Reguły niezawodności obejmują:

Reguła Opis
CA2000: Usuwanie obiektów przed utratą zakresu Ze względu na to, że może wystąpić wyjątkowe zdarzenie, które uniemożliwi uruchomienie finalizatora obiektu, obiekt powinien zostać jawnie usunięty, zanim wszystkie odwołania do niego są poza zakresem.
CA2002: Nie blokuj obiektów ze słabą tożsamością Mówi się, że obiekt ma słabą tożsamość, gdy można uzyskać bezpośredni dostęp do niej w granicach domeny aplikacji. Wątek, który próbuje uzyskać blokadę obiektu, który ma słabą tożsamość, może zostać zablokowany przez drugi wątek w innej domenie aplikacji, który ma blokadę na tym samym obiekcie.
CA2007: Nie oczekuj bezpośrednio zadania Metoda asynchroniczna oczekuje bezpośrednioTask.
CA2008: Nie twórz zadań bez przekazywania TaskScheduler Operacja tworzenia lub kontynuacji zadania używa przeciążenia metody, która nie określa parametru TaskScheduler.
CA2009: Nie należy wywoływać elementu ToImmutableCollection na wartości ImmutableCollection ToImmutable metoda została niepotrzebnie wywołana w niezmiennej kolekcji z System.Collections.Immutable przestrzeni nazw.
CA2011: Nie przypisuj właściwości w setter Właściwość została przypadkowo przypisana do własnej zestawu dostępu.
CA2012: Poprawnie użyj wartościTasks WartościZadania zwracane z wywołań składowych mają być bezpośrednio oczekiwane. Próby wielokrotnego korzystania z elementu ValueTask lub bezpośredniego uzyskania dostępu do wyniku, zanim wiadomo, że zostanie ukończone, mogą spowodować wyjątek lub uszkodzenie. Ignorowanie takiej wartościTask jest prawdopodobnie wskazaniem usterki funkcjonalnej i może obniżyć wydajność.
CA2013: Nie należy używać metody ReferenceEquals z typami wartości Podczas porównywania wartości przy użyciu System.Object.ReferenceEquals, jeśli objA i objB są typami wartości, są one w polu przed przekazaniem ich do metody ReferenceEquals. Oznacza to, że nawet jeśli zarówno objA, jak i objB reprezentują to samo wystąpienie typu wartości, metoda ReferenceEquals jednak zwraca wartość false.
CA2014: Nie używaj pętli stackalloc w pętlach. Miejsce na stos przydzielone przez stosalloc jest zwalniane tylko na końcu wywołania bieżącej metody. Użycie go w pętli może spowodować niezwiązane wzrost stosu i ostateczne warunki przepełnienia stosu.
CA2015: Nie należy definiować finalizatorów typów pochodzących z klasy MemoryManager<T> Dodanie finalizatora do typu pochodzącego z MemoryManager<T> może pozwolić na zwolnienie pamięci, gdy jest ona nadal używana przez Span<T>.
CA2016: Przekaż parametr CancellationToken do metod, które przyjmują jeden Przekaż CancellationToken parametr do metod, które przyjmują jeden, aby upewnić się, że powiadomienia o anulowaniu operacji są prawidłowo propagowane, lub przekaż jawnie CancellationToken.None, aby wskazać celowo nie propagację tokenu.
CA2017: Niezgodność liczby parametrów Liczba parametrów podanych w szablonie komunikatu rejestrowania nie jest zgodna z liczbą nazwanych symboli zastępczych.
CA2018: Argument count do Buffer.BlockCopy powinien określać liczbę bajtów do skopiowania W przypadku używania Buffer.BlockCopyargument count określa liczbę bajtów do skopiowania. Należy użyć tylko Array.Length dla argumentu count w tablicach, których elementy są dokładnie jednym bajtem rozmiaru. byte, sbytei tablice bool mają elementy o rozmiarze jednego bajtu.
CA2019: pola ThreadStatic nie powinny używać inicjowania wbudowanego Pole z adnotacjami z ThreadStaticAttribute jest inicjowane w tekście lub jawnie w konstruktorze static (Shared w języku Visual Basic).
CA2020: Zapobieganie zmianom behawioralnym spowodowanym przez wbudowane operatory intPtr/UIntPtr Niektóre wbudowane operatory dodane na platformie .NET 7 zachowują się inaczej niż operatory zdefiniowane przez użytkownika na platformie .NET 6 i starszych wersjach. Niektóre operatory, które były używane do zgłaszania nieznaczonego kontekstu podczas przepełnienia nie są już zgłaszane, chyba że opakowane w kontekście sprawdzonym. Niektóre operatory, które wcześniej nie zgłaszały zaznaczonego kontekstu, zgłaszają teraz, chyba że są opakowane w nieznakowanym kontekście.
CA2021: Nie wywoływanie funkcji Enumerable.Cast<T> lub Enumerable.OfType<T> z niezgodnymi typami Wywołanie Enumerable.Cast<TResult>(IEnumerable) lub Enumerable.OfType<TResult>(IEnumerable) określa parametr typu niezgodny z typem kolekcji wejściowej.
CA2022: Unikaj nieistniejącego odczytywania przy użyciu Stream.Read Wywołanie Stream.Read może zwrócić mniej bajtów niż zażądano, co powoduje zawodny kod, jeśli wartość zwracana nie jest sprawdzana.
CA2024: Nie używaj strumieniaReader.EndOfStream w metodach asynchronicznych Właściwość StreamReader.EndOfStream może spowodować niezamierzone blokowanie synchroniczne, gdy żadne dane nie są buforowane. Zamiast tego użyj StreamReader.ReadLineAsync() bezpośrednio, co zwraca null po osiągnięciu końca strumienia.