Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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. |
| CA2023: Nieprawidłowe nawiasy klamrowe w szablonie wiadomości | Szablony komunikatów rejestrowania używają nawiasów klamrowych { i } do oznaczenia nazwanych symboli zastępujących dla wartości. Nieprawidłowe użycie nawiasów klamrowych w szablonach komunikatów może prowadzić do wyjątków w czasie działania lub nieoczekiwanego zachowania podczas rejestrowania. |
| 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. |
CA2025: Nie przekazuj IDisposable wystąpień do zadań nieoczekiwanych |
Zadania nieoczekiwane, które używają wystąpień IDisposable, mogą korzystać z tych wystąpień długo po ich zlikwidowaniu. Upewnij się, że zadania korzystające z tych wystąpień są wykonywane przed likwidacją wystąpień. |
| CA2026: Preferuj JsonElement.Parse ponad JsonDocument.Parse(). Element główny | Bardziej wydajne jest wywołanie JsonElement.Parse bezpośrednio niż wywołanie JsonDocument.Parse().RootElement. |
Współpracuj z nami na GitHub
Źródło tej zawartości można znaleźć w witrynie GitHub, gdzie można również tworzyć i przeglądać problemy oraz żądania ściągnięcia. Aby uzyskać więcej informacji, zapoznaj się z naszym przewodnikiem dla twórców.