Udostępnij za pośrednictwem


Ostrzeżenia analizy kodu dla zarządzanego kodu dzięki CheckId

Poniższa tabela zawiera ostrzeżenia analizy kodu dla kodu zarządzanego przez identyfikator CheckId ostrzeżenia.

Ostrzeżenia

CheckId

Ostrzeżenie

Opis

CA1000

CA1000: Nie deklaruj statycznych elementów członkowskich na typach generycznych

Po wywołaniu statycznego elementu członkowskiego typu ogólnego dla typu trzeba określić argument typu.Po wywołaniu wystąpienia ogólnego elementu członkowskiego, które nie obsługuje wnioskowania, dla elementu członkowskiego musi zostać określony argument typu.W tych dwóch przypadkach składnia określająca argument typu jest różna i łatwo o pomyłkę.

CA1001

CA1001: Typy, które posiadają pola usuwalne, powinny być usuwalne

Klasa deklaruje i implementuje pole wystąpienia typu System.IDisposable, ale nie implementuje interfejsu IDisposable.Klasa, która deklaruje pole IDisposable, pośrednio posiada niezarządzany zasób i powinna implementować interfejs IDisposable.

CA1002

CA1002: Nie ujawniaj list generycznych

System.Collections.Generic.List<(Of <(T>)>) jest kolekcją ogólną, zaprojektowaną z myślą o wydajności, a nie o dziedziczeniu.Dlatego też lista nie zawiera wirtualnych elementów członkowskich.Zamiast powyższych powinny zostać zastosowane kolekcje ogólne, zaprojektowane do obsługi dziedziczenia.

CA1003

CA1003: Użyj wystąpień obsługi zdarzeń generycznych

Typ zawiera delegata zwracającego wartość typu void, którego podpis zawiera dwa parametry (pierwszy typu obiekt i drugi typu, który można przypisać do EventArgs), zawierające zestaw odwołujący się do Microsoft .NET Framework 2.0.

CA1004

CA1004: Generyczne metody powinny dostarczyć parametry typu

Wnioskowanie to ustalenie argumentu typu metody ogólnej przez typ argumentu przekazanego do metody, zamiast użycia jawnej specyfikacji argumentu typu.Aby włączyć wnioskowanie, podpis parametru metody ogólnej musi zawierać parametr, który jest tego samego typu co parametr typu dla metody.W tym przypadku argument typu nie musi zostać określony.W przypadku użycia wnioskowania dla wszystkich parametrów typu składnia wywoływania ogólnych i nieogólnych metod wystąpień jest identyczna; upraszcza to użycie metod ogólnych.

CA1005

CA1005: Unikaj nadużywania parametrów na typach generycznych

Im więcej parametrów typu zawiera typ ogólny, tym trudniej poznać i zapamiętać, co reprezentuje każdy z nich.Zwykle jest to jasne w przypadku jednego parametru typu, jak w List<T>, oraz w niektórych przypadkach zawierających dwa parametry typu, jak Dictionary<TKey, TValue>.Jeśli jednak istnieją więcej niż dwa parametry typu, poziom trudności staje się zbyt wysoki dla większości użytkowników.

CA1006

CA1006: Nie zagnieżdżaj typów generycznych w podpisach elementu członkowskiego

Argument typu zagnieżdżonego jest argumentem typu, który jest również typem ogólnym.Aby wywołać element członkowski, którego podpis zawiera argument typu zagnieżdżonego, użytkownik musi zainicjować wystąpienie pierwszego typu ogólnego i przekazać go do konstruktora drugiego typu ogólnego.Wymagana procedura oraz składnia są złożone i należy ich unikać.

CA1007

CA1007: Używaj danych generycznych wszędzie, gdzie jest to odpowiednie

Metoda widoczna na zewnątrz zawiera parametr przekazany przez odwołanie do typu System.Object.Użycie metody ogólnej umożliwia przekazanie wszystkich typów podlegających ograniczeniom do metody, bez uprzedniego rzutowania typu do typu parametru przekazanego przez odwołanie.

CA1008

CA1008: Wyliczenia powinny mieć wartość zero

Wartość domyślna niezainicjowanego typu wyliczeniowego, podobnie jak inne typy wartości, wynosi zero.Wyliczanie przypisane bez flag powinno definiować element członkowski przy użyciu wartości zero, tak że wartość domyślna jest prawidłową wartością wyliczenia.Jeśli wyliczenie, w którym zastosowano atrybut FlagsAttribute, definiuje element członkowski o wartości zero, powinno być nazwane „Brak”, aby wskazać, że żadne wartości nie zostały ustawione w wyliczeniu.

CA1009

CA1009: Należy poprawnie zadeklarować obsługę zdarzenia

Metody obsługi zdarzeń przyjmują dwa parametry.Pierwszy jest typu System.Object i nosi nazwę „nadawca”.Jest to obiekt, który wywołał zdarzenie.Drugi parametr jest typu System.EventArgs i nosi nazwę „e”.To dane, które są skojarzone ze zdarzeniem.Metody obsługi zdarzeń nie powinny zwracać wartości; w języku programowania C# jest to wskazywane przez zwrócony typ void.

CA1010

CA1010: Kolekcje powinny implementować interfejs generyczny

Aby poszerzyć użyteczność kolekcji, zaimplementuj jeden z interfejsów kolekcji generycznej.Następnie kolekcja może zostać użyta, aby wypełnić typy generyczne kolekcji.

CA1011

CA1011: Należy rozważyć przekazywanie typów bazowych jako parametrów

Jeśli typ podstawowy jest określony jako parametr w deklaracji metody, dowolny typ, który pochodzi od typu podstawowego, może zostać przekazany jako odpowiadający argument do metody.Jeśli dodatkowa funkcjonalność dostarczana przez typ parametru pochodnego nie jest wymagana, użycie typu podstawowego umożliwia szersze wykorzystanie metody.

CA1012

CA1012: Typy abstrakcyjne nie powinny mieć konstruktorów

Konstruktory dla typów abstrakcyjnych mogą być wywoływane tylko przez typy pochodne.Ze względu na to, że publiczne konstruktory tworzą wystąpienia typu, a nie można utworzyć wystąpienia typu abstrakcyjnego, publiczny konstruktor typu abstrakcyjnego został niepoprawnie zaprojektowany.

CA1013

CA1013: Przeciąż operator equals przeciążając operatory add i subtract

Typ publiczny lub chroniony implementuje operatory dodawania lub odejmowania bez implementowania operatora porównania.

CA1014

CA1014: Oznacz zestawy za pomocą CLSCompliantAttribute

The Common Language Specification (CLS) definiuje ograniczenia nazw, typów danych i reguł, z którymi muszą być zgodne zestawy, jeśli zostaną użyte w językach programowania.Zasada dobrego projektowania nakazuje, aby wszystkie zestawy jawnie wskazywały zgodność ze specyfikacją CLS poprzez użycie CLSCompliantAttribute.Jeśli ten atrybut nie jest obecny w zestawie, oznacza to, że zestaw jest niezgodny.

CA1016

CA1016: Oznacz zestawy za pomocą AssemblyVersionAttribute

.NET Framework używa numeru wersji, aby jednoznacznie zidentyfikować zestaw i powiązać z typami w zestawach o silnej nazwie.Numer wersji jest używany razem z zasadami wersji i wydawcy.Domyślnie aplikacje są uruchamiane tylko z wersji zestawu, z którego zostały zbudowane.

CA1017

CA1017: Oznacz zestawy za pomocą ComVisibleAttribute

ComVisibleAttribute określa, w jaki sposób klienci COM otrzymują dostęp do kodu zarządzanego.Zasada dobrego projektowania nakazuje, aby zestawy jawnie wskazywały widoczność COM.Widoczność COM można ustawić dla całego zestawu, a następnie zastąpić dla poszczególnych typów i elementów członkowskich typu.Jeśli ten atrybut jest nieobecny, zawartość zestawu jest widoczna dla klientów COM.

CA1018

CA1018: Oznacz atrybuty AttributeUsageAttribute

Podczas definiowania atrybutu niestandardowego należy go oznaczyć przy użyciu elementu AttributeUsageAttribute, aby wskazać, w którym miejscu kodu źródłowego ma być on zastosowany.Znaczenie i zamierzone użycie atrybutu określi jego prawidłowe lokalizacje w kodzie.

CA1019

CA1019: Zdefiniuj metody dostępu do argumentów atrybutu

Atrybuty mogą definiować obowiązkowe argumenty, które trzeba określić, aby móc zastosować atrybut do obiektu docelowego.Znane są również jako argumenty pozycyjne, ponieważ są one dostarczane do konstruktorów atrybutu jako parametry pozycyjne.Dla każdego obowiązkowego argumentu atrybut powinien również dostarczyć odpowiadającą właściwość tylko do odczytu, dzięki której można pobrać wartość argumentu w czasie wykonywania.Atrybuty mogą też definiować argumenty opcjonalne, które są znane również jako argumenty nazwane.Argumenty te są dostarczane do konstruktorów atrybutu poprzez nazwę i powinny mieć odpowiadającą właściwość umożliwiającą odczyt i zapis.

CA1020

CA1020: Unikaj przestrzeni nazw z kilkoma typami

Należy się upewnić, że każda z przestrzeni nazw posiada organizację logiczną i że istnieje uzasadniony powód, aby umieszczać typy w słabo wypełnionych przestrzeniach nazw.

CA1021

CA1021: Unikanie parametrów wyjściowych

Przekazywanie typów przez odwołanie (używając out lub ref) wymaga doświadczenia w zakresie wskaźników, rozumienia różnicy między typami wartości i typami odwołania oraz umiejętności obsługi metod z wieloma wartościami zwracanymi.Ponadto różnica między parametrami out i ref nie jest powszechnie zrozumiała.

CA1023

CA1023: Indeksatory nie powinny być wielowymiarowe

Indeksatory (właściwości indeksowane) powinny używać pojedynczego indeksu.Indeksatory wielowymiarowe mogą znacznie zmniejszyć użyteczność biblioteki.

CA1024

CA1024: Używaj właściwości wszędzie, gdzie jest to odpowiednie

Metody publiczne lub chronione mają nazwę zaczynającą się od „Get”, nie posiadają parametrów i zwracają wartość, która nie jest tablicą.Metoda ta może być dobrym kandydatem na właściwość.

CA1025

CA1025: Zastąp powtarzające się argumenty tabelą parametrów

Użyj tablicy parametrów zamiast powtarzających się argumentów, gdy znana jest dokładna liczba argumentów i argumenty zmiennych są tego samego typu lub mogą być przekazane jako ten sam typ.

CA1026

CA1026: Domyślne parametry nie powinny być używane

Metody z wykorzystaniem parametrów domyślnych są dozwolone w ramach CLS, jednak CLS umożliwia kompilatorom ignorowanie wartości, które są przypisane do tych parametrów.Aby zapewnić odpowiednie zachowanie w językach programowania, metody z wykorzystaniem parametrów domyślnych należy zastąpić przeciążeniami metody, które dostarczają parametry domyślne.

CA1027

CA1027: Oznaczaj wyliczenia za pomocą FlagsAttribute

Wyliczenie to typ wartości, który definiuje zestaw powiązanych, nazwanych stałych.Zastosuj atrybut FlagsAttribute do wyliczenia, gdy jego stałe nazwane mogą zostać sensownie połączone.

CA1028

CA1028: Pamięć wyliczenia powinna być Int32

Wyliczenie to typ wartości, który definiuje zestaw powiązanych, nazwanych stałych.Domyślnie typ danych System.Int32 jest używany do przechowywania wartości stałej.Mimo że można zmienić ten typ podstawowy, nie jest to wymagane ani zalecane dla większości scenariuszy.

CA1030

CA1030: Używaj zdarzeń wszędzie, gdzie jest to odpowiednie

Ta reguła wykrywa metody o nazwach, które normalnie mogą być używane dla zdarzeń.Jeśli metoda jest wywoływana w odpowiedzi na jasno określoną zmianę stanu, powinna ona zostać wywołana przez program obsługi zdarzeń.Obiekty, które wywołują tę metodę, powinny wywoływać zdarzenia, a nie bezpośrednio metodę.

CA1031

CA1031: Nie przechwytuj wyjątków typów ogólnych

Ogólne wyjątki nie powinny być przechwytywane.Przechwytuj wyjątek bardziej precyzyjny lub zgłoś ponownie ogólny wyjątek jako ostatnią instrukcję w bloku catch.

CA1032

CA1032: Implementowanie standardowych konstruktorów wyjątków

Niepowodzenie podczas dostarczenia pełnego zestawu konstruktorów może utrudnić poprawną obsługę wyjątków.

CA1033

CA1033: Typy potomne powinny móc wywoływać metody interfejsu

Niezapieczętowany typ widoczny na zewnątrz zapewnia jawną implementację metody interfejsu publicznego i nie dostarcza alternatywnej metody widocznej z zewnątrz o tej samej nazwie.

CA1034

CA1034: Zagnieżdżone typy nie powinny być widoczne

Typ zagnieżdżony to typ, który jest zadeklarowany wewnątrz zakresu innego typu.Typy zagnieżdżone są przydatne w przypadku hermetyzacji szczegółów implementacji prywatnej typu zawierającego.Używane w tym celu typy zagnieżdżone nie powinny być widoczne na zewnątrz.

CA1035

CA1035: Implementacje ICollection mają silnie typizowane elementy członkowskie

Ta reguła wymaga implementacji ICollection w celu dostarczenia mocno typizowanych elementów członkowskich, tak aby użytkownicy nie musieli rzutować argumentów na typ Object w przypadku używania funkcjonalności dostarczonej przez interfejs.Ta reguła zakłada, że typ, który implementuje ICollection, robi to tak, aby zarządzać kolekcją wystąpień typów mocniejszych niż Object.

CA1036

CA1036: Zastępuj metody na typach porównywalnych

Typ publiczny lub chroniony implementuje interfejs System.IComparable.Nie zastępuje on metody Object.Equals ani nie przeciąża specyficznego dla języka operatora równości, nierówności, mniejsze lub większe niż.

CA1038

CA1038: Wyliczenia powinny być silnie typizowane

Ta reguła wymaga implementacji IEnumerator w celu dostarczenia silnie typizowanej wersji właściwości Current, tak aby użytkownicy nie musieli rzutować wartości zwróconej na typ silny w przypadku używania funkcjonalności dostarczonej przez interfejs.

CA1039

CA1039: Listy są silnie typizowane

Ta reguła wymaga implementacji IList w celu dostarczenia silnie typizowanych elementów członkowskich, tak aby użytkownicy nie musieli rzutować argumentów na typ System.Object w przypadku używania funkcjonalności dostarczonej przez interfejs.

CA1040

CA1040: Unikaj pustych interfejsów

Interfejsy definiują elementy członkowskie, które zapewniają zachowanie lub użycie kontraktu.Funkcjonalność opisana przez interfejs może zostać przyjęta przez dowolny typ, niezależnie od tego, gdzie ten typ się pojawia w hierarchii dziedziczenia.Typ implementuje interfejs, dostarczając implementacje dla jego elementów członkowskich.Pusty interfejs nie definiuje żadnych elementów członkowskich; dlatego też nie definiuje kontraktu, który można zaimplementować.

CA1041

CA1041: Zapewnianie wiadomości ObsoleteAttribute

Typ lub element członkowski jest oznaczony za pomocą atrybutu System.ObsoleteAttribute, który nie ma określonej właściwości ObsoleteAttribute.Message.Podczas kompilowania typu lub elementu członkowskiego, który jest oznaczony za pomocą ObsoleteAttribute, wyświetlana jest właściwość Wiadomość atrybutu.Dostarcza to informacje użytkownika o przestarzałym typie lub elemencie członkowskim.

CA1043

CA1043: Dla indeksatorów używaj argumentów integral lub string

Indeksatory (właściwości indeksowane) powinny używać dla indeksu typów całkowitych lub ciągu.Typy te są zwykle używane do indeksowania struktur danych i zwiększają one użyteczność biblioteki.Użycie typu Object powinno zostać ograniczone do przypadków, w których nie może zostać określony typ całkowity lub ciąg w czasie projektowania.

CA1044

CA1044: Właściwości nie powinny być tylko do zapisu

Chociaż posiadanie właściwości tylko do odczytu jest dopuszczalne i często konieczne, wytyczne projektowania zabraniają używania właściwości tylko do zapisu.Dzieje się tak dlatego, że umożliwienie użytkownikowi ustawienia wartości, a następnie uniemożliwianie przeglądania tej wartości nie zapewnia żadnych zabezpieczeń.Poza tym bez dostępu do odczytu nie można przeglądać stanu obiektów udostępnionych, co ogranicza ich przydatność.

CA1045

CA1045: Nie przekazuj typów przez odwołanie

Przekazywanie typów przez odwołanie (używając out lub ref) wymaga doświadczenia w zakresie wskaźników, rozumienia różnicy między typami wartości i typami odwołania oraz umiejętności obsługi metod z wieloma wartościami zwracanymi.Architekci biblioteki, którzy tworzą dla wszystkich, nie powinni oczekiwać od użytkowników dobrej znajomości parametrów out lub ref.

CA1046

CA1046: Nie przeciążaj operatora equals w typach referencyjnych

Dla typów odwołań domyślna implementacja operatora równości jest prawie zawsze poprawna.Domyślnie dwa odwołania są równe tylko wtedy, gdy wskazują ten sam obiekt.

CA1047

CA1047: Nie deklaruj chronionych elementów członkowskich w typach zapieczętowanych

Chronione elementy członkowskie są zadeklarowane w typach tak, aby typy dziedziczące miały dostęp do elementu członkowskiego i mogły go zastąpić.Z definicji po typach zapieczętowanych nie można dziedziczyć, co oznacza, że nie można wywołać metody chronionej na typach zapieczętowanych.

CA1048

CA1048: Nie deklaruj wirtualnych elementów członkowskich w typach zapieczętowanych

Metody wirtualne są zadeklarowane w typach tak, aby typy dziedziczące mogły zmieniać implementację metod wirtualnych.Z definicji po typie zapieczętowanym nie można dziedziczyć.Powoduje to, że metoda wirtualna w typie zapieczętowanym jest całkowicie nieprzydatna.

CA1049

CA1049: Typy, które posiadają natywne zasoby powinny być usuwalne

Typy, które przydzielają zasoby niezarządzane, powinny implementować interfejs IDisposable, umożliwiając metodom wywołującym zwalnianie tych zasobów na żądanie i skrócenie czasu istnienia obiektów, które zawierają te zasoby.

CA1050

CA1050: Deklaruj typy w przestrzeni nazw

Typy są zadeklarowane w przestrzeniach nazw, aby zapobiec kolizjom nazw oraz jako sposób organizowania typów powiązanych w hierarchii obiektów.

CA1051

CA1051: Nie deklaruj widocznych pól wystąpień

Głównym zastosowaniem pola powinno być to, co szczegółowo opisuje implementacja.Pola powinny być prywatne lub wewnętrzne i dostępne przy użyciu właściwości.

CA1052

CA1052: Typy obsługi statycznej powinny być zapieczętowane

Typ publiczny lub chroniony zawiera tylko statyczne elementy członkowskie i nie jest zadeklarowany za pomocą modyfikatora sealed (C# Reference) (NotInheritable).Typ, po którym nie będzie dziedziczenia, powinien być oznakowany przy użyciu modyfikatora sealed, aby zapobiec użyciu go jako typu podstawowego.

CA1053

CA1053: Typy obsługi statycznej nie powinny mieć konstruktorów

Typ publiczny lub publiczny zagnieżdżony deklaruje tylko statyczne elementy członkowskie i ma publiczny lub chroniony konstruktor domyślny.Konstruktor jest zbędny, ponieważ wywołanie statycznego elementu członkowskiego nie wymaga wystąpienia tego typu.Przeciążenie typu ciąg powinno wywoływać, dla bezpieczeństwa, przeciążenie jednolitego identyfikatora zasobów (URI) przy użyciu argumentu typu ciąg.

CA1054

CA1054: Parametry identyfikatora URI nie powinny być ciągami

Jeśli metoda pobiera reprezentację ciągu identyfikatora URI, powinno zostać dostarczone odpowiadające przeciążenie, pobierające wystąpienie klasy URI, które dostarcza te usługi w bezpieczny sposób.

CA1055

CA1055: Wartości zwracane identyfikatora URI nie powinny być ciągami

Reguła ta zakłada, że metoda zwraca identyfikator URI.Reprezentacja ciągu identyfikatora URI jest podatna na analizowanie i kodowanie błędów i może prowadzić do powstawania luk w zabezpieczeniach.Klasa System.Uri udostępnia te usługi w bezpieczny sposób.

CA1056

CA1056: Właściwości identyfikatora URI nie powinny być ciągami

Reguła ta zakłada, że właściwość reprezentuje identyfikator URI.Reprezentacja ciągu identyfikatora URI jest podatna na analizowanie i kodowanie błędów i może prowadzić do powstawania luk w zabezpieczeniach.Klasa System.Uri udostępnia te usługi w bezpieczny sposób.

CA1057

CA1057: Przeciążenia identyfikatora URI, który jest ciągiem, wywołują przeciążenia System.Uri

Typ deklaruje przeciążenia metody, które różnią się jedynie zastąpieniem parametru typu ciąg parametrem System.Uri.Przeciążenie, które przyjmuje parametr typu ciąg, nie wywołuje przeciążenia, które przyjmuje parametr identyfikatora URI.

CA1058

CA1058: Typy nie powinny rozszerzać pewnych typów bazowych

Typ widoczny na zewnątrz rozszerza niektóre typy podstawowe.Użyj jednej z alternatyw.

CA1059

CA1059: Elementy członkowskie nie powinny uwidaczniać pewnych typów konkretnych

Konkretny typ jest typem posiadającym pełną implementację i dlatego może zostać utworzone jego wystąpienie.Aby włączyć powszechne użycie elementu członkowskiego, zamień konkretny typ, używając sugerowanego interfejsu.

CA1060

CA1060: Przenieś P/Invokes do klasy NativeMethods

Metody Platform Invocation, na przykład te, które zostały oznaczone za pomocą atrybutu System.Runtime.InteropServices.DllImportAttribute, lub metody, które zostały zdefiniowane za pomocą słowa kluczowego Declare w Visual Basic, uzyskują dostęp do kodu niezarządzanego.Metody te powinny być klasami NativeMethods, SafeNativeMethods lub UnsafeNativeMethods.

CA1061

CA1061: Nie należy ukrywać metod klasy podstawowej

Metoda w typie podstawowym jest ukryta przez metodę o identycznej nazwie typu pochodnego, gdy sygnatura parametru metody pochodnej różni się tylko typami, które są słabiej dziedziczone niż odpowiadające typy w sygnaturze parametru metody podstawowej.

CA1062

CA1062 Walidacja argumentów metod publicznych

Wszystkie argumenty odwołania, które są przekazywane do metody widocznej na zewnątrz, powinny być sprawdzane pod kątem wartości null.

CA1063

CA1063: Należy prawidłowo zaimplementować interfejs IDisposable

Wszystkie typy IDisposable powinny poprawnie implementować wzorzec Dispose.

CA1064

CA1064: Wyjątki powinny być publiczne

Wyjątek wewnętrzny jest widoczny tylko wewnątrz własnego zakresu wewnętrznego.W przypadku wystąpienia wyjątku poza zakresem wewnętrznym tylko wyjątek podstawowy może zostać użyty do jego przechwycenia.Jeśli wyjątek wewnętrzny jest dziedziczony z T:System.Exception, T:System.SystemException lub T:System.ApplicationException, kod zewnętrzny nie ma wystarczających informacji, aby wiedzieć, co należy zrobić z wyjątkiem.

CA1065

CA1065: Nie należy wyrzucać wyjątków w nieoczekiwanych lokalizacjach

Metoda, od której nie oczekiwano zgłaszania wyjątków, zgłasza wyjątek.

CA1300

CA1300: Określ MessageBoxOptions

Aby poprawnie wyświetlić okno komunikatu dla kultur stosujących pismo od prawej do lewej, członkowie RightAlign i RtlReading wyliczenia MessageBoxOptions muszą być przekazani do metody Show.

CA1301

CA1301: Należy unikać duplikowania akceleratorów

Klucz dostępu, znany również jako akcelerator, umożliwia dostęp z klawiatury do formantu za pomocą klawisza ALT.Kiedy wiele formantów ma zduplikowany klucz dostępu, jego zachowanie nie jest dobrze zdefiniowane.

CA1302

CA1302: Nie należy kodować ciągów określonych dla ustawień regionalnych

Wyliczenie System.Environment.SpecialFolder zawiera elementy, które odwołują się do folderów specjalnych systemu.Lokalizacje tych folderów mogą mieć różne wartości w poszczególnych systemach operacyjnych; użytkownik może zmienić niektóre z tych lokalizacji; lokalizacje są zlokalizowane.Metoda Environment.GetFolderPath zwraca lokalizacje, które są skojarzone z wyliczeniem Environment.SpecialFolder, zlokalizowane i odpowiednie dla danego komputera.

CA1303

CA1303: Nie należy przekazywać literałów jako parametrów zlokalizowanych

Metoda widoczna na zewnątrz przekazuje literał ciągu jako parametr do konstruktora lub metody w bibliotece klas .NET Framework i ciąg ten powinien być możliwy do zlokalizowania.

CA1304

CA1304: Określ CultureInfo

Metoda lub konstruktor wywołuje członka mającego przeciążenie, które akceptuje parametr System.Globalization.CultureInfo i metodę lub konstruktor niewywołujący przeciążenia, które wymaga parametru CultureInfo.Kiedy obiekt CultureInfo lub System.IFormatProvider nie jest podany, domyślna wartość, która jest dostarczana przez członka przeciążonego, może nie wywoływać oczekiwanego efektu we wszystkich ustawieniach regionalnych.

CA1305

CA1305: Określ IFormatProvider

Metoda lub konstruktor wywołują jednego lub kilku członków, którzy mają przeciążenia akceptujące parametr System.IFormatProvider, i metody lub konstruktora, który nie wywołuje przeciążenia przyjmującego parametr IFormatProvider.Kiedy obiekt System.Globalization.CultureInfo lub IFormatProvider nie jest podany, domyślna wartość przekazywana przez członka przeciążonego może nie wywoływać oczekiwanego efektu we wszystkich ustawieniach regionalnych.

CA1306

CA1306: Należy ustawić ustawienia regionalne dla typów danych

Ustawienia regionalne określą specyficzne dla kultur elementy prezentacji danych, takie jak formatowanie, które jest używane dla wartości liczbowych, symbole walut i porządek sortowania.Podczas tworzenia elementu DataTable lub DataSet należy jawnie ustawić ustawienia regionalne.

CA1307

CA1307: Określ StringComparison

Operacja porównania ciągu używa przeciążenia metody, które nie ustawia parametru StringComparison.

CA1308

CA1308: Znormalizuj ciągi na wielkie litery

Ciągi powinny być znormalizowane do użycia wielkich liter.Małe grupy znaków nie mogą wykonywać rund, gdy są one konwertowane na małe litery.

CA1309

CA1309: Użyj porządkowego StringComparison

Operacja porównania ciągu, która jest nielingwistyczna, nie ustawia parametru StringComparison na Ordinal lub OrdinalIgnoreCase.Poprzez jawne ustawienie parametru na StringComparison.Ordinal lub StringComparison.OrdinalIgnoreCase kod często zaczyna działać szybciej, staje się bardziej poprawny i niezawodny.

CA1400

CA1400: Powinny istnieć punkty wejścia P/Invoke

Metoda publiczna lub chroniona jest oznaczona za pomocą atrybutu System.Runtime.InteropServices.DllImportAttribute.Nie można zlokalizować biblioteki niezarządzanej lub dopasować metody do funkcji w bibliotece.

CA1401

CA1401: P/Invokes nie powinny być widoczne

Metoda publiczna lub chroniona w typie publicznym ma atrybut System.Runtime.InteropServices.DllImportAttribute (również implementowany przez słowo kluczowe Declare w Visual Basic).Takie metody nie powinny być udostępniane.

CA1402

CA1402: Unikaj przeciążeń w interfejsach widocznych dla modelu COM

Gdy przeciążone metody są udostępniane klientom COM, tylko pierwsze przeciążenie metody zachowuje swoją nazwę.Kolejne przeciążenia są jednoznacznie nazywane przez dołączenie do nazwy znaku podkreślenia (_) i liczby całkowitej, która odpowiada kolejności deklaracji przeciążeń.

CA1403

CA1403: Typy automatycznego układu nie powinny być widoczne dla modelu COM

Typ wartości widocznej dla modelu COM jest oznaczony za pomocą atrybutu System.Runtime.InteropServices.StructLayoutAttribute ustawionego na LayoutKind.Auto.Układ tych typów może się zmieniać między wersjami .NET Framework, co spowoduje przerwanie klientów modelu COM, które oczekują określonego układu.

CA1404

CA1404: Należy wywołać GetLastError natychmiast po P/Invoke

Wywołano metodę Marshal.GetLastWin32Error lub równoważną funkcję Win32 GetLastError, a bezpośrednio poprzedzające wywołanie nie jest odpowiednie do metody wywołania systemu operacyjnego.

CA1405

CA1405: Typy podstawowe typu widocznego dla modelu COM powinny być widoczne dla modelu COM

Typ widoczny dla modelu COM pochodzi od typu, który nie jest widoczny dla modelu COM.

CA1406

CA1406: Unikaj argumentów Int64 dla klientów programu Visual Basic 6

Klienci Visual Basic 6 COM nie mogą uzyskać dostępu do 64-bitowych liczb całkowitych.

CA1407

CA1407: Unikaj statycznych elementów członkowskich w typach widocznych dla modelu COM

Model COM nie obsługuje metod statycznych.

CA1408

CA1408: Nie używać AutoDual ClassInterfaceType

Typy, które korzystają z podwójnych interfejsów, umożliwiają klientom powiązanie z określonym interfejsem.Wszelkie zmiany w przyszłej wersji układu typu lub wszelkich typów podstawowych spowodują przerwanie klientów COM powiązanych z interfejsem.Domyślnie jeśli atrybut ClassInterfaceAttribute nie jest określony, używany jest interfejs służący tylko do wysłania.

CA1409

CA1409: Typy widoczne dla modelu COM powinny być możliwe do utworzenia

Typ odwołania, który jest specjalnie oznaczony jako widoczny dla modelu COM, zawiera publiczny konstruktor sparametryzowany, ale nie zawiera publicznego domyślnego (bezparametrowego) konstruktora.Klienci COM nie mogą stworzyć typu bez publicznego konstruktora domyślnego.

CA1410

CA1410: Metody rejestracji COM powinny być dopasowane

Typ deklaruje metodę, która jest oznaczona za pomocą atrybutu System.Runtime.InteropServices.ComRegisterFunctionAttribute, ale nie deklaruje metody oznaczonej za pomocą atrybutu System.Runtime.InteropServices.ComUnregisterFunctionAttribute lub odwrotnie.

CA1411

CA1411: Metody rejestracji modelu COM nie powinny być widoczne

Metoda oznaczona za pomocą atrybutu System.Runtime.InteropServices.ComRegisterFunctionAttribute lub atrybutu System.Runtime.InteropServices.ComUnregisterFunctionAttribute jest widoczna na zewnątrz.

CA1412

CA1412: Oznacz interfejsy ComSource jako IDispatch

Typ jest oznaczony za pomocą atrybutu System.Runtime.InteropServices.ComSourceInterfacesAttribute i co najmniej jeden z określonych interfejsów nie jest oznaczony za pomocą atrybutu System.Runtime.InteropServices.InterfaceTypeAttribute ustawionego na ComInterfaceType.InterfaceIsIDispatch.

CA1413

CA1413: Unikaj pól niepublicznych w typach wartościowych widocznych dla modelu COM

Pola niepubliczne wystąpień typów wartości widocznych dla modelu COM są widoczne dla klientów COM.Przejrzyj zawartość pól pod kątem informacji, które nie powinny być eksponowane lub będą mieć niezamierzone efekty dla projektu lub zabezpieczeń.

CA1414

CA1414: Oznacz logiczne argumenty P/Invoke za pomocą MarshalAs

Typ danych Boolean ma wiele reprezentacji w kodzie niezarządzanym.

CA1415

CA1415: Należy poprawnie zadeklarować P/Invokes

Ta reguła szuka deklaracji metod wywołania systemu operacyjnego, które celują w funkcje Win32 ze wskaźnikiem do parametru struktury OVERLAPPED, a odpowiadający parametr zarządzalny nie jest wskaźnikiem do struktury System.Threading.NativeOverlapped.

CA1500

CA1500: Nazwy zmiennych nie powinny odpowiadać nazwom pól

Metoda wystąpienia deklaruje parametr lub zmienną lokalną, których nazwa pasuje do pola wystąpienia typu deklarującego, prowadząc do błędów.

CA1501

CA1501: Unikaj nadmiernego dziedziczenia

Typ jest głęboki na więcej niż cztery poziomy w hierarchii dziedziczenia.Hierarchie typów głęboko zagnieżdżonych mogą być trudne do śledzenia, zrozumienia i utrzymania.

CA1502

CA1502: Unikaj nadmiernej złożoności

Ta reguła mierzy liczbę liniowo niezależnych ścieżek za pośrednictwem metody, która jest określona przez liczbę i złożoność rozgałęzień warunkowych.

CA1504

CA1504: Przegląd mylących nazw pól

Nazwa pola wystąpienia zaczyna się od „s_” lub nazwa pola statycznego (Shared w języku Visual Basic) zaczyna się od „m_”.

CA1505

CA1505: Unikaj kodu niemożliwego w utrzymaniu

Typ lub metoda ma niską wartość indeksu konserwacji.Niski indeks konserwacji wskazuje, że typ lub metoda są prawdopodobnie trudne do utrzymania i są dobrymi kandydatami do przeprojektowania.

CA1506

CA1506: Unikaj nadmiernego sprzężenia klas

Ta reguła mierzy sprzęgnięcie klasy przez liczenie unikatowych odwołań typów, które zawiera typ lub metoda.

CA1600

CA1600: Nie używaj priorytetu procesu bezczynności

Nie należy ustawiać priorytetu procesu na Idle.Procesy, które mają System.Diagnostics.ProcessPriorityClass.Idle, zajmują procesor, gdy może on być bezczynny, a zatem będą blokować stan gotowości.

CA1601

CA1601: Nie używaj czasomierzy, które uniemożliwiają zmianę stanu zasilania

Wyższa częstotliwość działań okresowych sprawi, że procesor będzie zajęty, co zakłóci działanie czasomierzy bezczynności oszczędzających energię, które wyłączają ekran i dyski twarde.

CA1700

CA1700: Nie należy nadawać wartościom enum oznaczenia „Reserved"

Ta reguła zakłada, że element członkowski wyliczenia o nazwie, która zawiera „reserved”, nie jest obecnie używany, ale jest symbolem zastępczym do zmiany nazwy lub usunięcia w przyszłej wersji.Zmiana nazwy lub usuwanie członka jest zmianą przerywającą.

CA1701

CA1701: Wyrazy złożone ciągu zasobu należy zapisywać z uwzględnieniem wielkości liter

Każdy wyraz w ciągu zasobu jest podzielony na tokeny oparte na obudowie.Każda ciągła kombinacja dwóch tokenów jest sprawdzana przez bibliotekę sprawdzania pisowni firmy Microsoft.Jeżeli zostanie rozpoznana, dane słowo powoduje naruszenie reguły.

CA1702

CA1702: Wyrazy złożone należy zapisywać z uwzględnieniem wielkości liter

Nazwa identyfikatora zawiera wiele wyrazów i co najmniej jeden z nich wydaje się wyrazem złożonym, w którym wielkość liter nie jest poprawna.

CA1703

CA1703: Ciągu zasobu należy zapisywać poprawnie

Ciąg zasobu zawiera jeden lub więcej wyrazów, które nie są rozpoznane przez bibliotekę sprawdzania pisowni Microsoft.

CA1704

CA1704: Identyfikatory powinny być napisane poprawnie

Nazwa widocznego na zewnątrz identyfikatora zawiera jeden lub więcej wyrazów, które nie są rozpoznane przez bibliotekę sprawdzania pisowni Microsoft.

CA1707

CA1707: Identyfikatory nie powinny zawierać podkreśleń

Przez konwencję identyfikatory nazw nie zawierają znaku podkreślenia (_).Ta reguła sprawdza przestrzenie nazw, typy, elementy członkowskie i parametry.

CA1708

CA1708: Identyfikatory powinny różnić się czymś więcej niż wielkością liter

Identyfikatory przestrzeni nazw, typów, elementów członkowskich i parametry nie mogą się różnić jedynie wielkością liter, ponieważ języki dla środowiska uruchomieniowego języka wspólnego nie muszą rozróżniać wielkości liter.

CA1709

CA1709: Identyfikatory powinny być zapisywane z uwzględnieniem wielkości liter

Według konwencji nazwy parametrów używają notacji CamelCase, a przestrzenie nazw, typy i elementy członkowskie notacji PascalCase.

CA1710

CA1710: Identyfikatory powinny mieć poprawny przyrostek

Według konwencji nazwy typów, które rozszerzają pewne typy podstawowe lub implementują określone interfejsy lub typy pochodzące z tych typów, mają przyrostek skojarzony z typem bazowym lub interfejsem.

CA1711

CA1711: Identyfikatory powinny mieć poprawny przyrostek

Według konwencji nazwy typów, które rozszerzają pewne typy podstawowe lub implementują dane interfejsy lub typy pochodzące z tych typów, powinny kończyć się określonym zarezerwowanym sufiksem.Inne nazwy typów nie powinny używać tych zarezerwowanych sufiksów.

CA1712

CA1712: Nie należy poprzedzać wartości enum nazwą typu

Nazwy elementów członkowskich wyliczenia nie mają prefiksu od nazwy typu, ponieważ narzędzia programistyczne dostarczają informacje na temat typu.

CA1713

CA1713 Zdarzenia nie powinny posiadać prefiksów Before ani After

Nazwa zdarzenia rozpoczyna się od „Before” lub „After”.Nazwa powiązanych zdarzeń, które są wywoływane w określonej kolejności, używa czasu teraźniejszego lub przeszłego, aby wskazać względne położenie akcji w sekwencji.

CA1714

CA1714: Typy wyliczeniowe flag powinny mieć nazwy w liczbie mnogiej

Publiczne wyliczenie ma atrybut System.FlagsAttribute, a jego nazwa nie kończy się na „s”.Typy oznaczone przy użyciu FlagsAttribute mają nazwy w liczbie mnogiej, ponieważ atrybut wskazuje, że można określić więcej niż jedną wartość.

CA1715

CA1715: Identyfikatory powinny mieć poprawny prefiks

Nazwa interfejsu, który jest widoczny na zewnątrz, nie zaczyna się od wielkiej litery „I”.Nazwa parametru typu ogólnego na widocznych zewnętrznie typie lub metodzie nie zaczyna się od wielkiej litery „T”.

CA1716

CA1716: Identyfikatory nie powinny odpowiadać słowom kluczowym

Przestrzeń nazw lub nazwa typu odpowiada zastrzeżonym słowom kluczowym w języku programowania.Identyfikatory przestrzeni nazw i typów nie powinny być zgodne ze słowami kluczowymi, które są definiowane przez języki dla środowiska uruchomieniowego języka wspólnego.

CA1717

CA1717: Tylko typy wyliczeniowe FlagsAttribute powinny mieć nazwy w liczbie mnogiej

Zgodnie z konwencjami nazewnictwa, nazwa w liczbie mnogiej dla wyliczenia wskazuje, że w tym samym czasie można określić więcej niż jedną wartość wyliczenia.

CA1719

CA1719: Nazwy parametrów nie powinny odpowiadać nazwom elementów członkowskich

Nazwa parametru powinna przekazywać znaczenie parametru, a nazwa elementu członkowskiego — znaczenie elementu członkowskiego.W projekcie rzadko są one takie same.Nazywanie parametru tak samo jak nazwa jego elementu członkowskiego jest nieintuicyjne i utrudnia korzystanie z biblioteki.

CA1720

CA1720: Identyfikatory nie powinny zawierać nazw typów

Nazwa parametru w widocznym na zewnątrz elemencie członkowskim zawiera nazwę typu danych lub nazwa widocznego na zewnątrz elementu członkowskiego zawiera specyficzną dla języka nazwę typu danych.

CA1721

CA1721: Nazwy właściwości nie powinny odpowiadać metodom Get

Nazwa publicznego lub chronionego elementu członkowskiego zaczyna się od „Get” i odpowiada nazwie właściwości publicznej lub chronionej. Metody „Get” i właściwości powinny mieć nazwy, które wyraźnie odróżniają ich funkcje.

CA1722

CA1722: Identyfikatory powinny mieć poprawny prefiks

Zgodnie z konwencją, tylko niektóre elementy programowania mają nazwy rozpoczynające się od określonego prefiksu.

CA1724

CA1724: Nazwy typów nie powinny odpowiadać nazwom pól

Nazwy typów nie powinny odpowiadać nazwom przestrzeni nazw, które są zdefiniowane w bibliotece klas .NET Framework.Naruszenie tej zasady może zmniejszyć użyteczność biblioteki.

CA1725

CA1725: Nazwy parametrów powinny pasować do podstawowej deklaracji

Spójne nazywanie parametrów w zastąpieniu hierarchii zwiększa użyteczność zastąpienia metody.Jeśli nazwa parametru w metodzie pochodnej różni się od nazwy podstawowej deklaracji, może nie być jasne, czy metoda jest zastąpieniem metody podstawowej, czy też nowym przeciążeniem metody.

CA1726

CA1726: Używaj preferowanych terminów

Nazwa widocznego na zewnątrz identyfikatora zawiera termin, dla którego istnieje alternatywny, preferowany zamiennik.Alternatywnie nazwa zawiera określenie „Flag” lub „Flags”.

CA1800

CA1800: Nie przeprowadzaj niepotrzebnych operacji rzutowania

Zduplikowane rzutowania zmniejszają wydajność, zwłaszcza gdy rzutowania są wykonywane w niedużej iteracji.

CA1801

CA1801: Przejrzyj nieużywane parametry

Podpis metody zawiera parametr, który nie jest używany w jej treści.

CA1802

CA1802: Używaj literałów wszędzie, gdzie jest to odpowiednie

Pole jest zadeklarowane jako statyczne i tylko do odczytu (Shared i ReadOnly w Visual Basic) i jest zainicjowane za pomocą wartości obliczanej w czasie kompilacji.Ze względu na to, że wartość przypisana do pola docelowego jest obliczana w czasie kompilacji, należy zmienić deklarację pola na stałą (Const w Visual Basic), przez co wartość jest obliczana w czasie kompilacji, a nie wykonywania.

CA1804

CA1804: Usuń nieużywane zmienne lokalne

Nieużywane zmienne lokalne i niepotrzebne przydziały zwiększają rozmiar zestawu i zmniejszają wydajność.

CA1806

CA1806: Nie ignoruj wyników metod

Nowy obiekt jest tworzony, ale nigdy nie jest używany; albo metoda, która tworzy i zwraca nowy ciąg, jest wywoływana, ale nowy ciąg nigdy nie jest używany; albo metody COM lub P/Invoke zwracają HRESULT lub kod błędu, który nigdy nie jest używany.

CA1809

CA1809: Unikaj nadmiernego używania zmiennych lokalnych

Typowa optymalizacja wydajności polega na przechowywaniu wartości w rejestrze procesora zamiast w pamięci, co określa się jako „rejestrowanie wartości”.Aby zwiększyć szanse, że wszystkie zmienne lokalne są przechowywane w rejestrze procesora, należy ograniczyć liczbę zmiennych lokalnych do 64.

CA1810

CA1810: Zainicjuj wbudowane pola statyczne typu referencyjnego

Podczas gdy typ deklaruje jawny, statyczny konstruktor, kompilator just in time (JIT) do każdej metody statycznej dodaje sprawdzenie i konstruktora wystąpienia, aby upewnić się, że konstruktor statyczny został wcześniej wywołany.Sprawdzenia konstruktora statycznego mogą obniżyć wydajność.

CA1811

CA1811: Unikaj niewywołanego kodu prywatnego

Prywatny lub wewnętrzny element członkowski (na poziomie zestawu) nie ma obiektów wywołujących w zestawie; nie jest wywoływany przez środowisko uruchomieniowe języka wspólnego ani przez obiekt delegowany.

CA1812

CA1812: Unikaj wewnętrznych klas bez wystąpień

Wystąpienie typu na poziomie zestawu nie jest tworzone przez kod w zestawie.

CA1813

CA1813: Unikaj niezapieczętowanych atrybutów

Biblioteka klas .NET Framework zawiera metody do pobierania atrybutów niestandardowych.Domyślnie te metody wyszukują hierarchie dziedziczenia atrybutu.Plombowanie atrybutu eliminuje wyszukiwanie przez hierarchię dziedziczenia i może zwiększyć wydajność.

CA1814

CA1814: Wybieraj tablice nieregularne zamiast wielowymiarowych

Nieregularna tablica to ta, której elementy są tablicami.Tablice, które tworzą elementy, mogą mieć różne rozmiary, co zapewnia większą oszczędność miejsca w przypadku niektórych zestawów danych.

CA1815

CA1815: Zastąp metodę equals i operator równości dla typów wartości

Dla typów wartości dziedziczona implementacja operatora Equas wykorzystuje bibliotekę odbić i porównuje zawartość wszystkich pól.Odbicie jest obliczeniowo kosztowne, a porównanie równości każdego pola może być niepotrzebne.Jeśli można się spodziewać, że użytkownicy będą porównywać lub sortować wystąpienia lub używać wystąpień jako kluczy tabel haszowanych, typ wartości powinien implementować Equals.

CA1816

CA1816: Wywołaj poprawnie GC.SuppressFinalize

Metoda, która jest implementacją Dispose, nie wywołuje GC.SuppressFinalize; lub metoda, która nie jest implementacją Dispose, wywołuje GC.SuppressFinalize; lub metoda wywołuje GC.SuppressFinalize i przekazuje na coś innego niż „this” (Me w języku Visual Basic).

CA1819

CA1819: Właściwości nie powinny zwracać tablic

Tablice zwracane przez właściwości nie są zabezpieczone przed zapisem, nawet gdy mają właściwość tylko do odczytu.Aby zachować tablicę odporną na manipulacje, właściwość musi zwracać kopię tablicy.Zwykle użytkownicy nie rozumieją, jakie niekorzystne następstwa dla wydajności ma wywołanie takiej właściwości.

CA1820

CA1820: Zbadaj pod kątem ciągów pustych przy użyciu długości ciągu

Porównywanie ciągów za pomocą właściwości String.Length lub metody String.IsNullOrEmpty jest znacznie szybsze niż użycie operatora Equals.

CA1821

CA1821: Usuń puste finalizatory

Jeśli to tylko możliwe, należy unikać finalizatorów ze względu na dodatkowe obciążenie, które bierze udział w śledzeniu okresu istnienia obiektu.Pusty finalizator powoduje dodatkowe obciążenie i nie zapewnia żadnych korzyści.

CA1822

CA1822: Oznacz elementy członkowskie jako statyczne

Elementy członkowskie, które nie uzyskują dostępu do danych wystąpienia i nie wywołują metod wystąpienia, mogą zostać oznaczone jako statyczne (Shared w Visual Basic).Po oznaczeniu metod jako statyczne kompilator wygeneruje niewirtualne wywołania do tych członków.To może dać wymierny zysk wydajnościowy dla kodu wrażliwego na wydajność.

CA1823

CA1823: Unikaj nieużywanych pól prywatnych

Zostały wykryte pola prywatne, które w zestawie nie są widoczne jako dostępne.

CA1824

CA1824: Oznacz zestawy za pomocą NeutralResourcesLanguageAttribute

Atrybut NeutralResourcesLanguage informuje ResourceManager języka, który był używany do wyświetlania zasobów neutralnej kultury dla zestawu.To zwiększa wydajność wyszukiwania dla pierwszego zasobu, który się ładuje i może zmniejszyć zestaw roboczy.

CA1900

CA1900: Pola o typie wartości powinny być przenośne

Reguła ta sprawdza, czy struktury, które są zadeklarowane przez użycie jawnego układu, zostaną prawidłowo wyrównane podczas przekazywania do kodu niezarządzanego w 64-bitowych systemach operacyjnych.

CA1901

CA1901: Deklaracje P/Invoke powinny być przenośne

Ta reguła oblicza rozmiar każdego parametru oraz wartości zwróconej przez metodę P/Invoke i sprawdza, czy rozmiar parametru jest poprawny podczas przekazywania do kodu niezarządzanego w 32-bitowych i 64-bitowych systemach operacyjnych.

CA1903

CA1903: Używaj tylko API z frameworku docelowego

Element członkowski lub typ używa elementu członkowskiego lub typu wprowadzonego w dodatku Service Pack, który nie został uwzględniony razem ze wskazanym środowiskiem docelowym projektu.

CA2000

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, obiekty powinny być jawnie usuwane, zanim wszystkie odwołania do niego znajdą się poza zakresem.

CA2001

CA2001: Unikaj wywoływania problematycznych metod

Element członkowski wywołuje potencjalnie niebezpieczną lub problematyczną metodę.

CA2002

CA2002: Nie należy blokować obiektów z słabą tożsamością

Obiekt ma słabą tożsamość, gdy można uzyskać do niego bezpośredni dostęp poza granicami domeny aplikacji.Wątek, który próbuje uzyskać blokadę na obiekcie o słabej tożsamości, może zostać zablokowany przez drugi wątek w domenie innej aplikacji, która ma blokady dla tego samego obiektu.

CA2003

CA2003: Nie traktuj włókien jako wątków

Zarządzalny wątek jest traktowany jako wątek Win32.

CA2004

CA2004: Usuń wywołania do GC.KeepAlive

Podczas konwertowania użycia SafeHandle należy usunąć wszystkie wywołania do GC.KeepAlive (obiekt).W tym przypadku klasy nie powinny wywołać GC.KeepAlive.Założono, że nie mają one finalizatorów, ale polegają na elemencie SafeHandle, który ma sfinalizować dla nich dojście systemu operacyjnego.

CA2006

CA2006: Użyj SafeHandle, aby hermetyzować zasoby natywne

Wykorzystanie elementu IntPtr w kodzie zarządzanym może wskazywać na potencjalny problem dotyczący bezpieczeństwa i niezawodności.Wszystkie użycia elementu IntPtr muszą być przejrzane w celu ustalenia, czy użycie elementu SafeHandle lub podobnej technologii jest w tym miejscu wymagane.

CA2100

CA2100: Należy przeglądnąć zapytania SQL w poszukiwaniu luk w zabezpieczeniach

Metoda ustawia właściwość System.Data.IDbCommand.CommandText przez użycie ciągu, który jest zbudowany z argumentem ciągu do metody.Zasada ta zakłada, że argument ciągu zawiera dane wejściowe użytkownika.Ciąg polecenia SQL zbudowany z danych wejściowych użytkownika jest narażony na ataki przez wstrzyknięcie kodu SQL.

CA2101

CA2101: Należy określić operacje organizacyjne dla argumentów typu string P/Invoke

Element członkowski wywołania platformy zezwala na dostęp częściowo zaufanych wywołań, ma parametr ciągu i nie kieruje jawnie tego ciągu.Może to spowodować potencjalne luki w zabezpieczeniach.

CA2102

CA2102: Przechwytuj wyjątki inne niż CLSCompliant w ogólnej obsłudze wyjątków

Element członkowski w zestawie, który nie jest oznaczony za pomocą atrybutu RuntimeCompatibilityAttribute lub jest oznaczony jako RuntimeCompatibility(WrapNonExceptionThrows = false), zawiera blok catch obsługujący wyjątek System.Exception i nie zawiera bezpośrednio następującego ogólnego bloku catch.

CA2103

CA2103: Przejrzyj zabezpieczenia imperatywne

Metoda używa imperatywnych zabezpieczeń i może konstruować uprawnienia za pomocą informacji o stanie lub wartości zwrotnych, które można zmienić, dopóki żądanie jest aktywne.Należy używać zabezpieczeń deklaracyjnych wszędzie, gdzie to możliwe.

CA2104

CA2104: Nie deklaruj zmiennych typów referencyjnych tylko do odczytu

Typ widoczny z zewnątrz zawiera widoczne na zewnątrz pole tylko do odczytu, które jest typu referencji zmiennej.Typ zmienny to typ, którego dane wystąpienia mogą być modyfikowane.

CA2105

CA2105: Pola tablicy nie powinny być tylko do odczytu

Po zastosowaniu modyfikatora tylko do odczytu (ReadOnly w Visual Basic) do pola, które zawiera tablicę, pola nie można zmienić, aby odwoływało się do innej tablicy.Można jednak zmienić elementy tablicy, które są przechowywane w polu tylko do odczytu.

CA2106

CA2106: Potwierdzanie zabezpieczeń

Metoda potwierdza uprawnienia i żadne sprawdzenia zabezpieczeń nie są wykonywane na obiekcie wywołującym.Potwierdzanie uprawnienia zabezpieczeń bez sprawdzania zabezpieczeń może pozostawić zdatną do wykorzystania słabość zabezpieczeń w kodzie.

CA2107

CA2107: Przejrzyj użycie akcji Deny i Permit Only

Metoda PermitOnly i akcje zabezpieczeń CodeAccessPermission.Deny powinny być używane tylko przez osoby, które mają zaawansowaną wiedzę o zabezpieczeniach .NET Framework.Kod, który używa tych akcji zabezpieczeń, należy poddać przeglądowi zabezpieczeń.

CA2108

CA2108: Należy przeglądnąć zabezpieczenia deklaratywne typów wartościowych

Publiczny lub chroniony typ wartości jest zabezpieczony przez dostęp do danych lub zapotrzebowanie na łącza.

CA2109

CA2109: Przejrzyj widoczne programy obsługi zdarzeń

Wykryto publiczną lub chronioną metodę obsługi zdarzeń.Metody obsługi zdarzeń nie powinny być udostępnione, chyba że jest to absolutnie konieczne.

CA2111

CA2111: Wskaźniki nie powinny być widoczne

Wskaźnik nie jest prywatny, wewnętrzny ani tylko do odczytu.Złośliwy kod może zmienić wartość wskaźnika, co potencjalnie umożliwia dostęp do dowolnego miejsca w pamięci lub powoduje błędy aplikacji lub systemu.

CA2112

CA2112: Typy zabezpieczone nie powinny uwidaczniać pól

Typ publiczny lub chroniony zawiera pola publiczne i jest zabezpieczony przez zapotrzebowania na łącza.Jeśli kod ma dostęp do wystąpienia typu zabezpieczonego przez żądanie łącza, kod nie musi spełniać zapotrzebowania na łącza, aby uzyskać dostęp do pól typu.

CA2114

CA2114: Metody zabezpieczeń powinny być nadzbiorem typu

Metoda nie powinna mieć zabezpieczeń deklaratywnych zarówno na poziomie metody, jak i na poziomie typu dla tej samej akcji.

CA2115

CA2115: Wywołaj GC.KeepAlive gdy używasz zasobów natywnych

Ta reguła wykrywa błędy, które mogą wystąpić, ponieważ kończy się działanie niezarządzanego zasobu, a wciąż jest on używany w kodzie niezarządzanym.

CA2116

CA2116: Metody APTCA powinny wywoływać tylko metody APTCA

Gdy atrybut APTCA (AllowPartiallyTrustedCallersAttribute) jest obecny w zestawie całkowicie zaufanym i wykonuje kod w innym zestawie, który nie zezwala na dostęp częściowo zaufanych wywołań, mogą zostać wykorzystane luki w zabezpieczeniach.

CA2117

CA2117: Typy APTCA powinny rozszerzać tylko typy bazowe APTCA

Gdy atrybut APTCA jest obecny w pełni zaufanym zestawie, a typ w zestawie dziedziczy z typu, który nie zezwala na dostęp częściowo zaufanych wywołań, możliwe jest wykorzystanie luk w zabezpieczeniach.

CA2118

CA2118: Przegląd wykorzystania SuppressUnmanagedCodeSecurityAttribute

Atrybut SuppressUnmanagedCodeSecurityAttribute zmienia domyślne zachowanie systemu zabezpieczeń dla elementów członkowskich wykonujących kod niezarządzany, który używa wywołań międzyoperacyjnych COM lub systemu operacyjnego.Ten atrybut jest używany przede wszystkim do zwiększenia wydajności, wiąże się z nimi jednak znaczące zagrożenie bezpieczeństwa.

CA2119

CA2119: Zapieczętuj metody, które spełniają interfejsy prywatne

Dziedziczny typ publiczny dostarcza implementację metody wewnętrznego interfejsu, którą można zastąpić (Friend w Visual Basic).Aby naprawić naruszenie tej zasady, należy zapobiegać zastąpieniu metody poza zestawem.

CA2120

CA2120: Zabezpieczaj konstruktory serializacji

Typ ten ma konstruktor, który przyjmuje obiekt System.Runtime.Serialization.SerializationInfo i obiekt System.Runtime.Serialization.StreamingContext (podpis konstruktora serializacji).Ten konstruktor nie jest zabezpieczony przez sprawdzanie zabezpieczeń, ale jeden lub kilka regularnych konstruktorów typu jest zabezpieczonych.

CA2121

CA2121: Konstruktory statyczne powinny być prywatne

System wywołuje statyczny konstruktor przed utworzeniem pierwszego wystąpienia typu lub przed odwołaniem do któregokolwiek ze statycznych elementów członkowskich.Jeśli konstruktor statyczny nie jest prywatny, może być wywołany przez kod inny niż system.W zależności od operacji, które są wykonywane w konstruktorze, może to spowodować nieoczekiwane zachowanie.

CA2122

CA2122: Nie należy pośrednio ujawniać metod w żądaniach konsolidacji

Element członkowski publiczny lub chroniony ma zapotrzebowanie na łącza i jest wywoływany przez element członkowski, który nie sprawdza zabezpieczeń.Zapotrzebowanie na łącza sprawdza uprawnienia tylko bezpośredniego wywołującego.

CA2123

CA2123: Zastąpienia żądań konsolidacji powinny być identyczne z bazowym

Ta reguła dopasowuje metodę do jej metody podstawowej, która jest interfejsem lub metodą wirtualną innego typu, a następnie porównuje zapotrzebowania na łącza na każdym z nich.Jeśli zasada ta jest naruszona, złośliwy wywołujący może pominąć zapotrzebowanie na łącza przez wywołanie niezabezpieczonej metody.

CA2124

CA2124: Kodowanie wrażliwych klauzul finally w zewnętrznym try

Metoda publiczna lub chroniona zawiera blok try/finally.Wygląda na to, że blok finally resetuje stan zabezpieczeń i sam nie jest ujęty w bloku finally.

CA2126

CA2126: Typ żądań konsolidacji wymaga żądań dziedziczenia

Niezamknięty typ publiczny jest chroniony za pomocą zapotrzebowania na łącza i ma metodę, którą można zastąpić.Ani typ, ani metoda nie są chronione za pomocą żądania dziedziczenia.

CA2127

CA2136: Elementy członkowskie nie powinny mieć skonfliktowanych adnotacji przezroczystości

Krytyczny kod nie może wystąpić w zestawie, który jest w 100% przezroczysty.Reguła ta analizuje zestawy w 100% przezroczyste dla adnotacji SecurityCritical na poziomie typu, pola i metody.

CA2128

CA2147: Jawne metody nie mogą używać potwierdzeń zabezpieczeń

Reguła ta analizuje wszystkie metody i typy w zestawie, który jest w 100% przezroczysty lub mieszany przezroczysto-krytyczny i zaznacza deklaratywne lub imperatywne użycie potwierdzenia.

CA2129

CA2140: Jawny kod nie może odwoływać się do elementów krytycznych dla zabezpieczeń

Metody, które są oznaczone atrybutem SecurityTransparentAttribute, wywołują niepubliczne elementy członkowskie, które są oznaczone jako SecurityCritical.Ta reguła analizuje wszystkie metody i typy w zestawie mieszanym przezroczysto-krytycznym i oznacza wszelkie wywołania z przezroczystego kodu do niepublicznego krytycznego kodu, który nie jest oznaczony jako SecurityTreatAsSafe.

CA2130

CA2130: Krytyczne stałe zabezpieczeń powinny być przezroczyste

Wymuszanie przezroczystości nie jest wymuszane dla wartości stałych, ponieważ kompilatory wbudowują stałe wartości, tak aby nie było wymagane żadne wyszukiwanie w czasie wykonywania.Stałe pola powinny być przezroczyste dla zabezpieczeń, tak aby recenzenci kodu nie zakładali, że przezroczysty kod nie może uzyskać dostępu do stałej.

CA2131

CA2131: Typy krytyczne dla zabezpieczeń nie mogą brać udziału w równoważnikach typów

Typ uczestniczy w równoważniku typu i albo sam typ, albo element członkowski, albo pole, albo typ jest oznaczony za pomocą atrybutu SecurityCriticalAttribute.Ta reguła jest uruchamiana na wszystkich typach krytycznych lub typach, które zawierają metody krytyczne lub pola uczestniczące w równoważeniu typu.Gdy CLR wykryje taki typ, nie ładuje go z wyjątkiem TypeLoadException w czasie wykonywania.Zazwyczaj ta reguła jest wykorzystywana tylko wtedy, gdy użytkownicy ręcznie implementują równoważnik typu, zamiast opierać się wykonaniu równoważnika typu przez tlbimp i kompilatory.

CA2132

CA2132: Konstruktory domyślne muszą być co najmniej tak krytyczne, jak podstawowe konstruktory domyślne

Typy i elementy członkowskie, które mają atrybut SecurityCriticalAttribute, nie mogą być używane przez kod aplikacji Silverlight.Typy krytyczne dla bezpieczeństwa i członkowie mogą być używani tylko przez zaufany kod w .NET Framework dla biblioteki klas Silverlight.Ze względu na to, że publiczna lub chroniona konstrukcja w klasie pochodnej musi mieć taką samą lub większą przejrzystość jak jej klasa podstawowa, klasy w aplikacji nie mogą pochodzić z klasy oznaczonej jako SecurityCritical.

CA2133

CA2133: Delegatów należy powiązać z metodami ze spójną jawnością

To ostrzeżenie jest zgłaszane na metodzie, która wiąże obiekt delegowany, oznaczony za pomocą atrybutu SecurityCriticalAttribute, do metody, która jest przezroczysta lub oznaczona za pomocą SecuritySafeCriticalAttribute.Ostrzeżenie jest także zgłaszane na metodzie, która wiąże obiekt delegowany przezroczysty lub bezpieczny-krytyczny do metody krytycznej.

CA2134

CA2134: Metody muszą przechowywać spójną jawność podczas nadpisywania metod bazowych

Ta reguła jest wykorzystywana, gdy metoda oznaczona za pomocą atrybutu SecurityCriticalAttribute zastępuje metodę, która jest przezroczysta lub oznaczona za pomocą atrybutu SecuritySafeCriticalAttribute.Reguła ta jest też wykorzystywana, gdy metoda przezroczysta lub oznaczona przy użyciu atrybutu SecuritySafeCriticalAttribute zastępuje metodę oznaczoną za pomocą atrybutu SecurityCriticalAttribute.Reguła jest stosowana podczas zastępowania metody wirtualnej lub implementującej interfejs.

CA2135

CA2135: Zestawy poziomu 2 nie powinny zawierać LinkDemands

LinkDemands są przestarzałe w zestawie reguł zabezpieczeń poziomu 2.Zamiast używania elementu LinkDemands do wymuszania zabezpieczeń w czasie kompilacji JIT, należy oznaczyć metody, typy i pola za pomocą atrybutu SecurityCriticalAttribute.

CA2136

CA2136: Elementy członkowskie nie powinny mieć skonfliktowanych adnotacji przezroczystości

Atrybuty przezroczystości są stosowane od elementów kodu o większym zakresie do elementów o mniejszym zakresie.Atrybuty przezroczystości elementów kodu o większym zakresie mają pierwszeństwo przed atrybutami przejrzystości elementów kodu, które są zawarte w pierwszym elemencie.Na przykład klasa, która jest oznaczona za pomocą atrybutu SecurityCriticalAttribute, nie może zawierać metody oznaczonej za pomocą atrybutu SecuritySafeCriticalAttribute.

CA2137

CA2137: Jawne metody muszą zawierać tylko weryfikowalne IL

Metoda zawiera nieweryfikowalny kod lub zwraca typ przez odwołanie.Ta reguła jest wykorzystywana, kiedy przezroczysty pod względem zabezpieczeń kod próbuje wykonać niemożliwy do zweryfikowania Microsoft Intermediate Language (MISL).Jednak reguła nie zawiera pełnej weryfikacji IL i używa heurystyki do wykrywania większości naruszeń weryfikacji MSIL.

CA2138

CA2138: Jawne metody nie mogą wywoływać metod z atrybutem SuppressUnmanagedCodeSecurity

Metoda przezroczysta pod względem bezpieczeństwa wywołuje metodę, która jest oznaczona za pomocą atrybutu SuppressUnmanagedCodeSecurityAttribute.

CA2139

CA2139: Jawne metody mogą nie używać atrybutu HandleProcessCorruptingExceptions

Ta reguła jest wykorzystywana przez dowolną metodę, która jest przejrzysta i próbuje obsłużyć wyjątek uszkadzający proces przy użyciu atrybutu HandleProcessCorruptedStateExceptionsAttribute.Wyjątek uszkadzający proces to klasyfikacja wyjątków CLR w wersji 4.0 wątków takich jak AccessViolationException.Atrybut HandleProcessCorruptedStateExceptionsAttribute może być używany tylko przez metody krytyczne pod względem bezpieczeństwa i będzie ignorowany, jeśli zostanie zastosowany do metody przezroczystej.

CA2140

CA2140: Jawny kod nie może odwoływać się do elementów krytycznych dla zabezpieczeń

Element kodu, który jest oznaczony za pomocą atrybutu SecurityCriticalAttribute, jest krytyczny dla bezpieczeństwa.Przezroczysta metoda nie może użyć elementu krytycznego dla zabezpieczeń.Jeśli przezroczysty typ próbuje użyć typu krytycznego dla zabezpieczeń, zgłaszane są wyjątki TypeAccessException, MethodAccessException lub FieldAccessException.

CA2141

Metody CA2141:Transparent nie mogą spełniać LinkDemands

Przezroczysta pod względem bezpieczeństwa metoda wywołuje metodę w zestawie, który nie jest oznaczony za pomocą APTCA lub spełnia LinkDemand dla typu lub metody.

CA2142

CA2142: Jawny kod nie powinien być chroniony za pomocą LinkDemands

Reguła ta jest zgłaszana na przezroczystej metodzie, które wymaga elementu LinkDemands, aby uzyskać do niej dostęp.Przezroczysty kod zabezpieczeń nie powinien być odpowiedzialny za weryfikację zabezpieczeń operacji, a zatem nie powinien wymagać uprawnień.

CA2143

CA2143: Jawne metody nie powinny używać żądań zabezpieczeń

Przezroczysty kod zabezpieczeń nie powinien być odpowiedzialny za weryfikację zabezpieczeń operacji, a zatem nie powinien wymagać uprawnień.Przejrzysty pod względem bezpieczeństwa kod powinien używać pełnych żądań do podejmowania decyzji związanych z zabezpieczeniami, a kod krytyczny pod względem zabezpieczeń nie powinien opierać się na kodzie przezroczystym do wykonywania pełnego żądania.

CA2144

CA2144: Jawny kod nie powinien ładować zestawów z tablic bajtowych

Przegląd zabezpieczeń dla kodu przezroczystego nie jest tak kompletny pod względem bezpieczeństwa, jak kodu krytycznego, ponieważ przezroczysty kod nie może wykonywać czynności wrażliwych pod względem bezpieczeństwa.Zestawy, które są ładowane z tablicy bajtowej, mogą nie być niezauważone w przezroczystym kodzie, a ta tablica bajtów może zawierać krytyczny albo, co ważniejsze, krytyczny dla bezpieczeństwa kod, który musi być poddany inspekcji.

CA2145

CA2145: Jawne metody nie powinny być dekorowane za pomocą SuppressUnmanagedCodeSecurityAttribute

Metody, które są oznaczone przez atrybut SuppressUnmanagedCodeSecurityAttribute, mają niejawny element LinkDemand umieszczony na dowolnej metodzie, który ją wywołuje.Ten element LinkDemand wymaga, aby kod wywołujący był krytyczny dla bezpieczeństwa.Oznaczanie metody, która używa zabezpieczenia SuppressUnmanagedCodeSecurity przez użycie atrybutu SecurityCriticalAttribute, sprawia, że wymóg ten jest bardziej oczywisty dla obiektów wywołujących metodę.

CA2146

CA2146: Typy muszą być co najmniej tak ważne, jak ich typy podstawowe i interfejsy

Reguła ta jest wykorzystywana, gdy typ pochodny ma atrybut przezroczystości pod względem zabezpieczeń, który nie jest tak krytyczny, jak jego typ podstawowy lub zaimplementowany interfejs.Tylko typy krytyczne pod względem zabezpieczeń mogą pochodzić od podstawowych typów krytycznych lub implementować interfejsy krytyczne, a tylko typy krytyczne lub krytyczne dla bezpieczeństwa mogą pochodzić od podstawowych typów krytycznych dla bezpieczeństwa lub implementować interfejsy krytyczne dla bezpieczeństwa.

CA2147

CA2147: Jawne metody nie mogą używać potwierdzeń zabezpieczeń

Kod, który jest oznaczony jako SecurityTransparentAttribute, nie ma przyznanego wystarczającego uprawnienia do potwierdzenia.

CA2149

CA2149: Jawne metody nie mogą wywoływać kodu natywnego

Reguła ta jest wykorzystywana dla każdej przezroczystej metody, która wywołuje bezpośrednio kod natywny, na przykład przez metodę P/Invoke.Naruszenie tej zasady prowadzi do wyjątku MethodAccessException na poziomie 2 modelu przezroczystości i pełnego żądania dla UnmanagedCode w modelu przezroczystości poziomu 1.

CA2151

CA2151: Pola typu krytycznego powinny być bezpieczne-krytyczne

Aby używać typów krytycznych pod względem zabezpieczeń, kod odwołujący się do typu musi być albo krytyczny pod względem zabezpieczeń, albo bezpieczny-krytyczny pod względem zabezpieczeń.Ta zasada obowiązuje nawet w przypadku odwołania pośredniego.Dlatego pole mające zabezpieczenia przezroczyste lub pole bezpieczne-krytyczne pod względem zabezpieczeń jest mylące, ponieważ przezroczysty kod nadal nie będzie mógł uzyskać dostępu do pola.

CA2200

CA2200: Należy zgłosić ponownie, aby zachować szczegóły stosu

Wyjątek jest zgłaszany ponownie i jest on jawnie określony w instrukcji „throw”.Jeśli wyjątek jest zgłaszany ponownie przez określenie wyjątku w instrukcji „throw”, lista wywołań metod między pierwotną metodą, która zgłosiła wyjątek, a bieżącą zostanie utracona.

CA2201

CA2201: Nie wywołuj zastrzeżonych typów wyjątków

Dzięki temu oryginalny błąd jest trudny do wykrycia i debugowania.

CA2202

CA2202: Nie należy usuwać obiektów wiele razy

Implementacja metody zawiera ścieżki kodu, które powodują wielokrotne wywołania do System.IDisposable.Dispose lub równoważnika (na przykład użycie metody Close() na niektórych typach) dla tego samego obiektu.

CA2204

CA2204: Literały powinny być napisane poprawnie

Ciąg literału w treści metody zawiera jeden lub więcej wyrazów, które nie są rozpoznawane przez bibliotekę sprawdzania pisowni Microsoft.

CA2205

CA2205: Użyj zarządzanych odpowiedników interfejsu API Win32

System operacyjny wywołuje metodę, która jest zdefiniowana, a metoda, która ma równoważną funkcjonalność, znajduje się w bibliotece klas .NET Framework.

CA2207

CA2207: Inicjowanie pól statycznych typu wartościowego

Typ wartości deklaruje jawny, statyczny konstruktor.Aby naprawić naruszenie tej zasady, zainicjuj wszystkie dane statyczne, gdy jest on zadeklarowany, i usuń konstruktor statyczny.

CA2208

CA2208: Utwórz poprawne wystąpienia wyjątków argumentów

Wywołanie odnosi się do domyślnego (bezparametrowego) konstruktora typu wyjątku, który jest elementem ArgumentException lub od niego pochodzi, albo niepoprawny argument ciągu jest przekazywany do sparametryzowania konstruktora typu wyjątku lub pochodzi od elementu ArgumentException.

CA2210

CA2210: Zestawy powinny mieć prawidłowe silne nazwy

Silna nazwa chroni klientów przed nieświadomym ładowaniem zestawu, który został zmieniony.Zestawy bez silnej nazwy nie powinny być wdrażane poza bardzo ograniczonymi scenariuszami.Jeśli użytkownik udostępnia lub dystrybuuje zestawy, które nie są poprawnie podpisane, zestaw może zostać zmieniony, środowisko uruchomieniowe języka wspólnego może nie załadować zestawu lub użytkownik będzie musiał wyłączyć weryfikację na swoim komputerze.

CA2211

CA2211: Niestałe pola nie powinny być widoczne

Pola statyczne, które nie są ani stałe, ani tylko do odczytu, nie obsługują wielowątkowości.Dostęp do takich pól musi być starannie kontrolowany i wymaga zaawansowanych technik programowania, aby synchronizować dostęp do obiektu klasy.

CA2212

CA2212: Nie należy oznaczać obsługiwanych składników znacznikiem WebMethod

Metoda w typie, który dziedziczy z elementu System.EnterpriseServices.ServicedComponent, jest oznaczona za pomocą atrybutu System.Web.Services.WebMethodAttribute.Ze względu na to, że atrybut WebMethodAttribute i metoda ServicedComponent mają sprzeczne zachowanie i wymagania dotyczące przepływu kontekstu i transakcji, w niektórych scenariuszach zachowanie metod będzie niepoprawne.

CA2213

CA2213: Pola usuwalne powinny zostać usunięte

Typ, który implementuje element System.IDisposable, deklaruje pola takiego typu, które implementują także IDisposable.Metoda Dispose pola nie jest wywoływana przez metodę Dispose typu deklarującego.

CA2214

CA2214: Nie należy wywoływać nadpisywalnych metod w konstruktorach

Gdy konstruktor wywołuje metodę wirtualną, konstruktor wystąpienia, który wywołuje metodę, mógł nie zostać wykonany.

CA2215

CA2215: Metody Dispose powinny wywoływać operację usuwania klasy podstawowej

Jeśli typ dziedziczy z typu usuwalnego, musi on wywołać metodę Dispose typu podstawowego z własną metodę Dispose.

CA2216

CA2216: Typy usuwalne powinny deklarować finalizator

Typ, który implementuje element System.IDisposable i zawiera pola, które sugerują wykorzystanie zasobów niezarządzanych, nie implementuje finalizatora, tak jak opisano w Object.Finalize.

CA2217

CA2217: Nie oznaczaj wyliczeń za pomocą FlagsAttribute

Widoczne na zewnątrz wyliczenie jest oznaczone przy użyciu FlagsAttribute i ma jedną lub więcej wartości, które nie są potęgami dwójki lub kombinacji innych zdefiniowanych wartości z wyliczenia.

CA2218

CA2218: Zastąp GetHashCode przy zastępowaniu Equals

GetHashCode zwraca wartość opartą na bieżącym wystąpieniu, które jest odpowiednie dla algorytmów wyznaczających wartości skrótu i struktur danych, takich jak tabela skrótów.Dwa obiekty, które są równe i tego samego typu, muszą zwrócić tę samą wartość skrótu.

CA2219

CA2219: Nie zgłaszaj wyjątków w klauzulach wyjątków

Kiedy wyjątek jest zgłaszany w klauzuli „finally” lub „fault”, nowy wyjątek ukrywa aktywny wyjątek.Gdy wyjątek jest zgłaszany w klauzuli „filter”, środowisko uruchomieniowe dyskretnie przechwytuje wyjątek.Dzięki temu oryginalny błąd jest trudny do wykrycia i debugowania.

CA2220

CA2220: Finalizatory powinny wywoływać finalizatory klasy podstawowej

Finalizacja musi być powielana w hierarchii dziedziczenia.Aby to zagwarantować, typy muszą wywołać metody Finalize swoich klas podstawowych w ich własnej metodzie Finalize.

CA2221

CA2221: Finalizatory powinny być chronione

Finalizatory muszą korzystać z modyfikatora dostępu „family”.

CA2222

CA2222: Nie zmniejszaj widoczności dziedziczonego elementu członkowskiego

Nie należy zmieniać modyfikatora dostępu dla dziedziczonych elementów członkowskich.Zmiana dziedziczonego elementu członkowskiego na prywatny nie uniemożliwia wywołującym uzyskania dostępu do implementacji metody klasy podstawowej.

CA2223

CA2223: Elementy członkowskie powinny różnić się bardziej, niż typem zwracanym

Chociaż środowisko uruchomieniowe języka wspólnego pozwala na używanie typów zwracanych do rozróżnienia między inaczej identycznymi członkami, funkcja ta nie jest objęta specyfikacją języka wspólnego (CLS) ani nie jest wspólną cechą języków programowania .NET.

CA2224

CA2224: Zastąp metodę equals przeciążając operator equals

Typ publiczny implementuje operator równości, lecz nie zastępuje metody Object.Equals.

CA2225

CA2225: Operator overloads ma nazwanych zastępców

Wykryto przeciążony operator i nie znaleziono metody alternatywnej o oczekiwanej nazwie.Nazwany alternatywny element członkowski udostępnia taką samą funkcjonalność jak operator i jest dostarczany deweloperom programującym w językach, które nie obsługują przeciążonych operatorów.

CA2226

CA2226: Operatory powinny być przeciążane symetrycznie

Typ implementuje operator równości lub nierówności, ale nie implementuje operatora przeciwnego.

CA2227

CA2227: Właściwości kolekcji powinny być tylko do odczytu

Właściwość zapisywalnej kolekcji pozwala użytkownikowi zastąpić kolekcję inną kolekcją.Właściwość tylko do odczytu uniemożliwia zastępowanie kolekcji, ale nadal umożliwia ustawienie poszczególnych członków.

CA2228

CA2228: Nie dostarczaj niepublikowanych formatów zasobów

Pliki zasobów, które zostały zbudowane przy użyciu wstępnych wydań .NET Framework, mogą nie być użyteczne z obsługiwanymi wersjami .NET Framework.

CA2229

CA2229: Należy zaimplementować konstruktory serializacji

Aby naprawić naruszenie tej zasady, należy zaimplementować konstruktora serializacji.Dla zamkniętej klasy należy ustawić konstruktor prywatny; w przeciwnym razie powinien być chroniony.

CA2230

CA2230: Użyj parametrów dla zmiennych argumentów

Typ publiczny lub chroniony zawiera metodę publiczną lub chronioną, która używa wywoływania VarArgs zamiast słowa kluczowego params.

CA2231

CA2231: Przeciąż operator equals przy zastępowaniu ValueType.Equals

Typ wartości zastępuje metodę Object.Equals, ale nie implementuje operatora równości.

CA2232

CA2232: Oznacz punkty wpisu formularzy systemu Windows za pomocą STAThread

STAThreadAttribute wskazuje, że model wątkowości COM dla aplikacji jest jednowątkowym apartamentem.Atrybut ten musi być obecny w punkcie wejścia każdej aplikacji korzystającej z Windows Forms; jeśli zostanie pominięty, składniki systemu Windows mogą nie działać poprawnie.

CA2233

CA2233: Operacje nie powinny prowadzić do przepełnienia

Nie należy wykonywać operacji arytmetycznych bez uprzedniego sprawdzania argumentów.To gwarantuje, że wynik operacji nie jest spoza zakresu możliwych wartości dla typów danych, które są zaangażowane.

CA2234

CA2234: Przekaż obiekty System.Uri zamiast ciągów

Wykonano wywołanie do metody, która ma parametr typu ciąg, którego nazwa zawiera „uri”, „URI”, „urn”, „URN”, „url” lub „URL”.Deklarujący typ metody zawiera odpowiadające przeciążenie metody z parametrem System.Uri.

CA2235

CA2235: Należy oznaczyć wszystkie nieserializowane pola

Pola wystąpienia typu, który nie może być serializowany, jest zadeklarowany w typie, który jest możliwy do serializacji.

CA2236

CA2236: Wywołanie metod klasy podstawowej typu ISerializable

Aby naprawić naruszenie tej zasady, należy wywołać metodę GetObjectData typu podstawowego lub konstruktor serializacji z odpowiadającej metody typu pochodnego albo konstruktora.

CA2237

CA2237: Należy oznaczyć typ ISerializable atrybutem SerializableAttribute

Aby typy były rozpoznawalne przez CLR jako możliwe do serializacji, muszą być oznaczone za pomocą atrybutu SerializableAttribute nawet wtedy, gdy typ używa niestandardowych procedur serializacji przez implementację interfejsu ISerializable.

CA2238

CA2238: Należy poprawnie zaimplementować metody serializacji

Metoda, która obsługuje zdarzenie szeregowania, nie ma poprawnej sygnatury zwracanego typu lub widoczności.

CA2239

CA2239: Dostarcz metody deserializacji pól opcjonalnych

Typ ma pole oznaczone za pomocą atrybutu System.Runtime.Serialization.OptionalFieldAttribute, ale nie zapewnia on metod obsługi zdarzeń deserializacji.

CA2240

CA2240: Należy poprawnie zaimplementować ISerializable

Aby naprawić naruszenie tej zasady, należy się upewnić, że metoda GetObjectData jest widoczna oraz możliwa do zastąpienia i że wszystkie pola wystąpienia są uwzględnione w procesie serializacji lub jawnie oznaczone atrybutem NonSerializedAttribute.

CA2241

CA2241: Dostarcz poprawne argumenty do metod formatowania

Argument formatu, który jest przekazany do elementu System.String.Format, nie zawiera elementu format, który odpowiada każdemu obiektowi argumentu lub odwrotnie.

CA2242

CA2242: Testuj poprawnie pod kątem NaN

To wyrażenie sprawdza, czy wartość to Single.Nan lub Double.Nan.Użyj Single.IsNan(Single) lub Double.IsNan(Double) do testowania wartości.

CA2243

CA2243: Literały ciągu atrybutu powinny być analizowane poprawnie

Parametr o typie literału ciągu atrybutu nie analizuje poprawnie adresu URL, identyfikatora GUID lub wersji.

CA5122

CA5122 Deklaracje P/Invoke nie powinny być bezpieczne-krytyczne

Metody są oznaczone jako SecuritySafeCritical, gdy wykonują operacje zależne od zabezpieczeń, ale mogą być również bezpiecznie używane przez kod przezroczystości.Kod przezroczystości może nigdy bezpośrednio nie wywołać kodu natywnego za pośrednictwem metody P/Invoke.Dlatego oznakowanie metody P/Invoke jako bezpiecznej-krytycznej pod względem zabezpieczeń nie umożliwi jej wywołania kodu przezroczystości i jest mylące dla analizy zabezpieczeń.