Kod analizy ostrzeżenia dla kodu zarządzanego przez CheckId
Poniższa lista zawiera ostrzeżenia analizy kodu dla kodu zarządzanego przez identyfikator CheckId ostrzeżenia.
Ostrzeżenia
CheckId |
Ostrzeżenie |
Opis |
---|---|---|
CA1000 |
CA1000: Elementy statyczne nie są deklarowane w typach podstawowych |
Po wywołaniu statycznego elementu członkowskiego typu generycznego, argument typu musi zostać określony dla typu.Po wywołaniu wystąpienia generycznego elementu członkowskiego, który nie obsługuje wnioskowania, argument typu musi zostać określony dla elementu członkowskiego.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 własne pola jednorazowe powinna być jednorazowe |
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 |
System.Collections.Generic.list<(Z <(T>)>) jest kolekcją generyczną, zaprojektowaną z myślą o wydajności, nie dziedziczeniu.Dlatego też element List nie zawiera wirtualnych elementów członkowskich.Zamiast powyższych powinny zostać zastosowane kolekcje generyczne, które zostały zaprojektowane do obsługi dziedziczenia. |
|
CA1003 |
Typ zawiera pełnomocnika, który zwraca wartość typu void, którego podpis zawiera dwa parametry (pierwszy typu obiekt i drugi typu, który można przypisać do EventArgs) i zawierający zestaw odwołujący się do Microsoft .NET Framework 2.0. |
|
CA1004 |
Wnioskowanie to ustalenie argumentu typu metody generycznej poprzez typ argumentu przekazanego do metody, zamiast użycia jawnej specyfikacji argumentu typu.Aby włączyć wnioskowanie, podpis parametru metody generycznej 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 generycznych i nie-generycznych metod wystąpień jest identyczna; upraszcza to użycie metod ogólnych. |
|
CA1005 |
Im więcej parametrów typu zawiera typ generyczny, tym trudniej jest poznać i zapamiętać co reprezentuje każdy parametr typu.Zwykle jest jasne w przypadku jednego parametru typu, jak w List<T>, oraz w niektórych przypadkach zawierających dwa parametry typu, jak słownik <TKey, TValue>.Jednakże, jeśli 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 typy rodzajowe w Członkowskim podpisów |
Argument typu zagnieżdżonego jest argumentem typu, który jest również typem generycznym.Aby wywołać element członkowski, którego podpis zawiera argument typu zagnieżdżonego, użytkownik musi zainicjować wystąpienie pierwszego typu generycznego i przekazać go do konstruktora drugiego typu generycznego.Wymagana procedura oraz składnia jest złożona i powinno się jej unikać. |
CA1007 |
Metoda widoczna z zewnątrz zawiera parametr przekazany przez odwołanie do typu System.Object.Użycie metody generycznej umożliwia przekazanie wszystkich typów podlegających ograniczeniom do metody, bez uprzedniego rzutowania typu do typu parametru przekazanego przez odwołanie. |
|
CA1008 |
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, które posiada zastosowany 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 |
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# to jest wskazywane przez zwrócony typ void. |
|
CA1010 |
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ć, przekazując typów podstawowych jako parametry |
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ść, która jest dostarczana przez typ parametru pochodnego nie jest wymagana, użycie typu podstawowego umożliwia szersze wykorzystanie metody. |
CA1012 |
Konstruktory dla typów abstrakcyjnych mogą być wywoływane tylko przez typy pochodne.Ponieważ 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ążenie operator równości na przeciążenie Dodawanie i odejmowanie |
Typ publiczny lub chroniony implementuje operator dodawanie lub odejmowanie bez stosowania implementacji operatora równości. |
CA1014 |
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 używając CLSCompliantAttribute.Jeśli ten atrybut nie jest obecny w zestawie oznacza to, że zestaw jest niezgodny. |
|
CA1016 |
.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 |
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: Atrybutów znacznika z element AttributeUsageAttribute |
Podczas definiowania atrybutu niestandardowego należy go oznaczyć przy użyciu elementu AttributeUsageAttribute, aby wskazać, w którym miejscu kodu źródłowego można zastosować niestandardowy atrybut.Znaczenie i zamierzone użycie atrybutu określi jego prawidłowe lokalizacje w kodzie. |
CA1019 |
Atrybuty mogą definiować obowiązkowe argumenty, które muszą zostać określone, aby 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ą także definiować argumenty opcjonalne, które są również znane jako argumenty nazwane.Te argumenty są dostarczane do konstruktorów atrybutu poprzez nazwę i powinny posiadać odpowiadającą właściwość umożliwiającą odczyt i zapis. |
|
CA1020 |
Należy się upewnić, że każda z przestrzeni nazw posiada organizację logiczną oraz że istnieje uzasadniony powód, aby umieszczać typy w słabo wypełnionych przestrzeniach nazw. |
|
CA1021 |
Przekazywanie typów przez odwołanie (używając out lub ref) wymaga doświadczenia ze wskaźnikami, rozumienia różnicy między typami wartości i typami odwołania oraz obsługi metod z wieloma wartościami zwracanymi.Ponadto różnica między parametrami out i ref nie jest powszechnie zrozumiała. |
|
CA1023 |
Indeksatory (właściwości indeksowane) powinny używać pojedynczego indeksu.Indeksatory wielowymiarowe mogą znacznie zmniejszyć użyteczność biblioteki. |
|
CA1024 |
Metody publiczne lub chronione posiadają nazwę zaczynającą się od "Get", nie posiadają parametrów i zwracają wartość, która nie jest tablicą.Metoda może być dobrym kandydatem na właściwość. |
|
CA1025 |
Używaj tablicy parametrów zamiast powtarzających się argumentów, gdy znana jest dokładna liczba argumentów oraz gdy argumenty zmiennych są tego samego typu lub mogą być przekazane jako ten typ. |
|
CA1026 |
Metody, które używają parametrów domyślnych są dozwolone w ramach CLS; jednakże CLS umożliwia kompilatorom ignorowanie wartości, które są przypisane do tych parametrów.Aby zapewnić odpowiednie zachowanie w językach programowania, metody, które używają parametrów domyślnych powinny zostać zastąpione przez metody przeciążone, które dostarczają parametry domyślne. |
|
CA1027 |
Wyliczenie to typ wartości, który definiuje zestaw powiązanych, nazwanych stałych.Zastosuj FlagsAttribute do wyliczenia, gdy jego stałe nazwane mogą zostać sensownie połączone. |
|
CA1028 |
Wyliczenie to typ wartości, który definiuje zestaw powiązanych stałych nazwanych.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 |
Ta reguła wykrywa metody posiadające nazwy, które normalnie byłyby używane dla zdarzeń.Jeśli metoda jest wywoływana w odpowiedzi na jasno określoną zmianę stanu, metoda ta powinna zostać wywołana przez program obsługi zdarzeń.Obiekty, które wywołują tą metodę powinny wywoływać zdarzenia zamiast wywołać metodę bezpośrednio. |
|
CA1031 |
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 |
Niepowodzenie podczas dostarczenia pełnego zestawu konstruktorów może utrudnić poprawną obsługę wyjątków. |
|
CA1033 |
CA1033: Interfejs metody powinny być wpłacone przez podrzędne typy |
Niezapieczętowany typ widoczny z zewnątrz zapewnia jawną implementację metody interfejsu publicznego i nie dostarcza alternatywnej metody widocznej z zewnątrz o tej samej nazwie. |
CA1034 |
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 zawierającego typu.Używane w tym celu typy zagnieżdżone nie powinny być widoczne z zewnątrz. |
|
CA1035 |
CA1035: Implementacje kolekcji ICollection zdecydowanie wpisano członków |
Ta reguła wymaga implementacji ICollection w celu dostarczenia silnie 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 |
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 |
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 |
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 |
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 elementów członkowskich interfejsu.Pusty interfejs nie definiuje żadnych elementów członkowskich; dlatego też nie definiuje kontraktu, który można zaimplementować. |
|
CA1041 |
Typ lub element członkowski jest oznaczony za pomocą atrybutu System.ObsoleteAttribute, który nie posiada 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 |
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 |
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.Jest tak, ponieważ umożliwiając użytkownikowi ustawienie wartości, a następnie uniemożliwianie użytkownikowi przeglądanie tej wartości nie zapewnia żadnych zabezpieczeń.Tak, więc bez dostępu do odczytu nie można przeglądać stanu obiektów udostępnionych, co ogranicza ich przydatność. |
|
CA1045 |
Przekazywanie typów przez odwołanie (używając out lub ref) wymaga doświadczenia ze wskaźnikami, rozumienia różnicy między typami wartości i typami odwołania oraz obsługi metod, które mają wiele wartości zwracanych.Architekci biblioteki, którzy tworzą dla wszystkich nie powinni oczekiwać od użytkowników dobrej znajomości parametrów out lub ref. |
|
CA1046 |
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 są deklarowane chronionych członków w zamkniętych typów |
Chronione elementy członkowskie są zadeklarowane w typach tak, aby typy dziedziczące posiadały dostęp oraz mogły zastąpić element członkowski.Z definicji po typach zapieczętowanych nie może dziedziczyć, co oznacza, że nie można wywołać metody chronionej na typach zapieczętowanych. |
CA1048 |
CA1048: Nie są deklarowane Członkowie wirtualnego w zamkniętych typów |
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 macierzystych środków własnych powinna być jednorazowe |
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 |
Typy są zadeklarowane w obszarach nazw, aby zapobiec kolizjom nazw oraz jest to sposób organizowania typów powiązanych w hierarchii obiektów. |
|
CA1051 |
Głównym zastosowaniem pola powinno być to, co szczegółowo opisuje implementacja.Pola powinny być prywatne lub wewnętrzne i powinny być dostępne przy użyciu właściwości. |
|
CA1052 |
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 jego użyciu jako typu podstawowego. |
|
CA1053 |
CA1053: Typów statycznych posiadacz 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 |
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 |
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 |
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 |
Typ deklaruje przeciążenia metody, które różnią się jedynie zastąpieniem parametru typu ciąg parametrem System.Uri.Przeciążenie, która przyjmuje parametr typu ciąg nie wywołuje przeciążenia, które przyjmuje parametr identyfikatora URI. |
|
CA1058 |
CA1058: Typy nie powinna obejmować niektórych typów podstawowych |
Typ widoczny z zewnątrz rozszerza niektóre typy podstawowe.Użyj jednej z alternatyw. |
CA1059 |
CA1059: Członków nie powinny wystawiać niektórych konkretnych typów |
Konkretny typ jest typem, który posiada pełną implementację i dlatego też 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 |
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ć klasy NativeMethods, SafeNativeMethods lub UnsafeNativeMethods. |
|
CA1061 |
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ą bardziej słabo dziedziczone niż odpowiadające typy w sygnaturze parametru metody podstawowej. |
|
CA1062 |
Wszystkie argumenty odwołania, które są przekazywane do metody widocznej z zewnątrz powinny być sprawdzane czy nie są wartości null. |
|
CA1063 |
Wszystkie typy IDisposable powinny poprawnie implementować wzorzec Dispose. |
|
CA1064 |
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 przechwycenia tego wyjątku.Jeśli wyjątek wewnętrzny jest dziedziczony z T:System.Exception, T:System.SystemException lub T:System.ApplicationException kod zewnętrzny nie posiada wystarczających informacji, aby wiedzieć co należy zrobić z wyjątkiem. |
|
CA1065 |
CA1065: Nie należy podnosić wyjątki w lokalizacjach nieoczekiwany |
Metoda, od której nie oczekiwano zgłaszania wyjątków, zgłasza wyjątek. |
CA1300 |
Aby poprawnie wyświetlić okno komunikatu dla kultur, które używają kolejności czytania od prawej do lewej, członkowie wyliczenia MessageBoxOptions RightAlign i RtlReading muszą być przekazani do metody Show. |
|
CA1301 |
Klucz dostępu, znany również jako akcelerator, umożliwia dostęp z klawiatury do formantu przy użyciu klawisza ALT.Kiedy wiele formantów ma zduplikowany klucz dostępu, zachowanie klucza dostępu nie jest dobrze zdefiniowane. |
|
CA1302 |
CA1302: Czy nie zakodować ciągi określonych 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 różnych 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 przechodzą literały jako parametry zlokalizowane |
Metoda widoczna na zewnątrz przekazuje ciąg literału jako parametr do konstruktora lub metody w bibliotece klas .NET Framework i powinien być on możliwy do zlokalizowania. |
CA1304 |
Metoda lub konstruktor wywołuje członka, który ma przeciążenie, które akceptuje parametr System.Globalization.CultureInfo i metodę lub konstruktor, który nie wywołuje 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 mieć efektu, który pożądasz we wszystkich ustawieniach regionalnych. |
|
CA1305 |
Metoda lub konstruktor wywołuje jeden lub więcej członków, które mają przeciążenia, które akceptują parametr System.IFormatProvider i metody lub konstruktora, który nie wywołuje przeciążenie, które przyjmuje parametr IFormatProvider.Kiedy obiekt System.Globalization.CultureInfo lub IFormatProvider nie jest podany, domyślna wartość, która jest dostarczana przez członka przeciążonego, może nie mieć efektu, który pożądasz we wszystkich ustawieniach regionalnych. |
|
CA1306 |
Ustawienia regionalne określą specyficzne dla kultur elementy prezentacji dla danych, takie jak formatowanie, które jest używane dla wartości liczbowych, symbole walut i porządku sortowania.Podczas tworzenia elementu DataTable lub DataSet należy jawnie ustawić ustawienia regionalne. |
|
CA1307 |
Operacja porównania ciągu używa przeciążenie metody, które nie ustawia parametru StringComparison. |
|
CA1308 |
Ciągi powinny znormalizowane na wielkie litery.Małe grupy znaków nie mogą wykonywać rund, gdy są one konwertowane na małe litery. |
|
CA1309 |
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 zyskuje na prędkości, staje się bardziej poprawny i staje się bardziej niezawodny. |
|
CA1400 |
Metoda publiczna lub chroniona jest oznaczona za pomocą atrybutu System.Runtime.InteropServices.DllImportAttribute.Nie można zlokalizować biblioteki niezarządzanej lub metoda nie możne zostać dopasowana do funkcji w bibliotece. |
|
CA1401 |
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 |
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, ktora odpowiada kolejności deklaracji przeciążeń. |
|
CA1403 |
CA1403: Automatyczny układ typów nie powinny być widoczne 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żne się zmieniać między wersjami .NET Framework, co spowoduje przerwanie klientów modelu COM, które oczekują określonego układu. |
CA1404 |
Wywołano metodę Marshal.GetLastWin32Error lub równoważną funkcję Win32 GetLastError, a bezpośrednio poprzedzające wywołanie nie jest do metody wywołania systemu operacyjnego. |
|
CA1405 |
CA1405: Typów podstawowych widoczne typu COM powinny być widoczne COM |
Typ widoczne dla modelu COM pochodzi od typu, który nie jest widoczny dla modelu COM. |
CA1406 |
CA1406: Uniknąć Int64 argumenty dla klientów programu Visual Basic 6 |
Klienci Visual Basic 6 COM nie może uzyskać dostępu do 64-bitowych liczb całkowitych. |
CA1407 |
Model COM nie obsługuje metod statycznych. |
|
CA1408 |
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ład typu lub wszelkich typów podstawowych spowoduje 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: Widoczne typy Com powinna istnieć możliwość utworzenia |
Typ odwołania, które 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 |
Typ deklaruje metodę, która jest oznaczona pomocą atrybutu System.Runtime.InteropServices.ComRegisterFunctionAttribute, ale nie deklaruje metody oznaczonej za pomocą atrybutu System.Runtime.InteropServices.ComUnregisterFunctionAttribute lub odwrotnie. |
|
CA1411 |
Metoda oznaczona za pomocą atrybutu System.Runtime.InteropServices.ComRegisterFunctionAttribute lub atrybut System.Runtime.InteropServices.ComUnregisterFunctionAttribute jest widoczna z zewnątrz. |
|
CA1412 |
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 |
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 powinien być udostępnione lub będą mieć niezamierzone efekty dla projektu lub zabezpieczeń. |
|
CA1414 |
Typ danych Boolean ma wiele reprezentacji w kodzie niezarządzanym. |
|
CA1415 |
Ta reguła szuka deklaracji metod wywołania systemu operacyjnego, które celując w funkcje Win32, które mają wskaźnik do parametru struktury OVERLAPPED i odpowiadający parametr zarządzalny nie jest wskaźnikiem do struktury System.Threading.NativeOverlapped. |
|
CA1500 |
Metoda wystąpienia deklaruje parametr lub zmienna lokalną, których nazwa pasuje do pola wystąpienia typu deklarującego, prowadząc do błędów. |
|
CA1501 |
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 |
Ta reguła mierzy liczbę liniowo niezależnych ścieżek przez metodę, która jest określona przez liczbę i złożoność rozgałęzień warunkowych. |
|
CA1504 |
Nazwa pola wystąpienia zaczyna się od "s_" lub nazwa pola statycznego (Shared w języku Visual Basic) zaczyna się od "m_". |
|
CA1505 |
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 |
Ta reguła mierzy sprzęgnięcie klasy przez liczenie unikatowych odwołań typów, które zawiera typ lub metoda. |
|
CA1600 |
Nie należy ustawiać priorytetu procesu na Idle.Procesy, które mają System.Diagnostics.ProcessPriorityClass.Idle, zajmują procesor, gdy mógłby być bezczynny, a zatem będą blokować stan gotowości. |
|
CA1601 |
CA1601: Nie należy używać czasomierzy, które uniemożliwiają zmiany stanu zasilania |
Wyższa częstotliwość działań okresowych będzie sprawiać, że procesor będzie zajęty i będzie zakłócać czasomierze bezczynności oszczędzania energii, które wyłączają ekran i dyski twarde. |
CA1700 |
Ta reguła zakłada, że element członkowski wyliczenia, który ma nazwę, 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 przerywającą zmianą. |
|
CA1701 |
CA1701: Wyrazy złożone ciąg zasobów powinny być bocznym poprawnie |
Każdy wyraz w ciągu zasobu jest podzielona 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 rozpoznane, słowo powoduje naruszenie reguły. |
CA1702 |
Nazwa identyfikatora zawiera wiele wyrazów i co najmniej jeden z wyrazów wydaje się być złożonym wyrazem, w którym wielkość liter nie jest poprawna. |
|
CA1703 |
Ciąg zasobu zawiera jeden lub więcej wyrazów, które nie są rozpoznane przez bibliotekę sprawdzania pisowni Microsoft. |
|
CA1704 |
Nazwa widocznego z zewnątrz identyfikatora zawiera jeden lub więcej wyrazów, które nie są rozpoznany przez bibliotekę sprawdzania pisowni Microsoft. |
|
CA1707 |
CA1707: Identyfikatory nie powinien zawierać znaki podkreślenia |
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 się różnić o więcej niż w przypadku |
Identyfikatory przestrzeni nazw, typów, elementów członkowskich i parametry nie mogą się różnić jedynie wielkością liter, ponieważ języki dla CLR nie muszą rozróżniać wielkości liter. |
CA1709 |
Przez konwencję, nazwy parametrów używają notacji CamelCase, a przestrzesnie nazw, typy i elementy członkowskie notacji PascalCase. |
|
CA1710 |
Przez konwencję, nazwy typów, które rozszerzają pewne typy podstawowe lub implementują pewne interfejsy lub typy pochodzące z tych typów, mają przyrostek, który jest skojarzony z typem bazowym lub interfejsem. |
|
CA1711 |
Przez konwencję, nazwy typów, które roszeszają pewne typy podstawowe lub implementują pewne interfejsy lub typy pochodzące z tych typów, powinny się kończyć przez określony, zarezerwowany sufix.Inne nazwy typów nie powinny używać tych zarezerwowanych sufiksów. |
|
CA1712 |
Nazwy elementów członkowskich wyliczenia nie mają prefiksu od nazwy typu, ponieważ narzędzia programistyczne dostarczają informacje na temat typu. |
|
CA1713 |
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: Wyliczenia flag powinny mieć nazwy w liczbie mnogiej |
Publiczne wyliczenie ma atrybut System.FlagsAttribute, a jego nazwa nie kończą się na "s".Typy, które są oznaczone przy użyciu FlagsAttribute mają nazwy, które są liczby mnogiej, ponieważ atrybut wskazuje, że można określić więcej niż jedną wartość. |
CA1715 |
Nazwa interfejsu, który jest widoczne z zewnątrz, nie zaczyna się z wielkiej litery "I".Nazwa parametru typu generycznego na zewnątrznie widocznym typie lub metodzie, nie zaczyna się od litery "T". |
|
CA1716 |
CA1716: Identyfikatory nie powinny być zgodne słowa kluczowe |
Przestrzeń nazw lub nazwa typu odpowiada zastrzeżonym słowom kluczowym w języku programowania.Identyfikatory przestrzeni nazw i typów nie powinny być zgodna ze słowami kluczowymi, które są definiowane przez języki dla CLR. |
CA1717 |
CA1717: Tylko wyliczenia FlagsAttribute powinny mieć nazwy w liczbie mnogiej |
Konwencje nazewnictwa dyktują, że nazwa w liczbie mnogiej dla wyliczenia wskazuje, że w tym samym czasie można określić więcej niż jedną wartość wyliczenia. |
CA1719 |
Nazwa parametru powinna przekazywać znaczenie parametru, a element członkowski powinien przekazywać znaczenie elementu członkowskiego.Rzadko w projekcie są one takie same.Nazywanie parametru tak samo jak nazwa jego elementu członkowskiego jest nieintuicyjne i utrudnia używanie biblioteki. |
|
CA1720 |
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 |
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 nie powinien mieć niepoprawny prefiks |
Przez konwencję, tylko niektóre elementy mają nazwy, które rozpoczynają się od określonego prefiksu. |
CA1724 |
Nazwy typów powinny nie odpowiadać nazwom przestrzeni nazw, które są zdefiniowane w bibliotece klas .NET Framework.Naruszenie tej zasady może zmniejszyć użyteczność biblioteki. |
|
CA1725 |
CA1725: Parametr nazwy powinny być zgodne zgłoszenia podstawowego |
Spójne nazywanie parametrów w zastąpieniu hierarchii zwiększa użyteczność zastąpienia metody.Nazwę parametru w metodzie pochodnej, która różni się od nazwy podstawowej deklaracji, może powodować dezorientację czy metoda jest zastąpieniem metody podstawowej lub nowym przeciążeniem metody. |
CA1726 |
Nazwa widocznego z zewnątrz identyfikatora zawiera termin, dla którego istnieje alternatywny, preferowany termin.Alternatywnie, nazwa zawiera określenie "Flag" lub "Flags". |
|
CA1800 |
Zduplikowane rzutowania zmniejszyć wydajność, zwłaszcza gdy rzutowania wykonywane są w niedużej iteracji. |
|
CA1801 |
Podpis metody zawiera parametr, który nie jest używany w treści metody. |
|
CA1802 |
Pole jest zadeklarowany jako statyczne i tylko do odczytu (Shared i ReadOnly w Visual Basic) i jest zainicjowany za pomocą wartości, która jest obliczalna w czasie kompilacji.Ponieważ wartość, która jest przypisana do pola docelowego jest obliczalna w czasie kompilacji, należy zmienić deklaracje pola na stałą (Const w Visual Basic), dzięki czemu wartość jest obliczana w czasie kompilacji, zamiast w czasie wykonywania. |
|
CA1804 |
Nieużywane zmienne lokalne i niepotrzebne przydziały zwiększają rozmiar zestawu i zmniejszają wydajność. |
|
CA1806 |
Nowy obiekt jest tworzony, ale nigdy nie używany; lub metoda, która tworzy i zwraca nowy ciąg jest wywoływana, ale nowy ciąg nigdy nie jest używany; lub metody COM lub P/Invoke zwracą HRESULT lub kod błędu, który nigdy nie jest używany. |
|
CA1809 |
Typowa optymalizacja wydajności polega na przechowywaniu wartości w rejestrze procesora zamiast pamięci, co są określone 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 |
Podczas gdy typ deklaruje jawny, statyczny konstruktor, kompilator just in time (JIT) dodaje sprawdzenie do każdej metody i konstruktora wystąpienia, aby upewnić się, że konstruktor statycznym został wcześniej wywołany.Sprawdzenia statycznego konstruktora mogą obniżyć wydajność. |
|
CA1811 |
Prywatny lub wewnętrzny element członkowski (na poziomie zestawu) nie ma obiektów wywołujących w zestawie; nie jest wywoływany przez CLR; i nie jest wywoływany przez obiekt delegowany. |
|
CA1812 |
Wystąpienie typu na poziomie zestawu nie jest tworzone przez kod w zestawie. |
|
CA1813 |
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 |
Nieregularna tablica to tablica, której elementy są tablicami.Tablice, które tworzą elementy, mogą być różnych rozmiarów, prowadząc do mniejszej zmarnowanej przestrzeni dla niektórych zestawów danych. |
|
CA1815 |
CA1815: Zastępowanie jest równe i operator jest równe na typy wartości |
Dla typów wartości, dziedziczona implementacja operatora Equas wykorzystuje bibliotekę refleksji 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 oczekujesz, ż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 |
Metoda, która jest implementacją Dispose, nie wywołuje GC.SuppressFinalize; lub metoda, która nie jest implementacja 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 |
Tablice, które są zwracane przez właściwości nie są chronione przed zapisem, nawet wtedy, gdy właściwość jest tylko do odczytu.Aby zachować tablicę odporną na manipulacje właściwość musi zwracać kopię tablicy.Zazwyczaj użytkownicy nie rozumieją niekorzystnych następstw wydajnościowych wywołania takiej właściwości. |
|
CA1820 |
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 |
Jeśli to tylko możliwe, należy unikać finalizatorów ze względu na dodatkowe obciążenie, które biorze udział w śledzeniu okresu instnienia obiektu.Pusty finalizatorów ponosi dodaje obciążenie i nie dostarcza żadnych korzyści. |
|
CA1822 |
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 strony wywołań do tych członków.To może dać wymierny zysk wydajnościowy dla kodu wrażliwego na wydajność. |
|
CA1823 |
Wykryte zostały pola prywatne, do których nie następuje dostęp w zestawie. |
|
CA1824 |
CA1824: Znak zespołów o Atrybut 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 |
Ta regułą sprawdza, że struktury, które są zadeklarowane przez użycie jawnego ukłądu, zostaną prawidłowo wyrównane podczas przekazywania do kodu niezarządzalnego na 64-bitowym systemie operacyjnym. |
|
CA1901 |
Ta reguła oblicza rozmiar każdego parametru i wartości zwróconej przez P/Invoke i sprawdź czy rozmiar parametru jest poprawny podczas przekazywania do kodu niezarządzanego w 32-bitowych i 64-bitowych systemach operacyjnych. |
|
CA1903 |
Element członkowski lub typ używa elementu członkowskiego lub typu, który został wprowadzony w dodatku Service Pack, który nie został uwzględniony razem ze wskazaną platformą docelową projektu. |
|
CA2000 |
Ponieważ wyjątkowe zdarzenie może wystąpić, które uniemożliwi uruchomienie finalizatora obiekt, obiekty powinny być jawnie usuwane przez tym, jak wszystkie odwołania do niego są poza zakresem. |
|
CA2001 |
Element członkowski wywołuje potencjalnie niebezpieczną lub problematyczną metodę. |
|
CA2002 |
Obiekt ma słabą tożsamość, kiedy bezpośrednio można uzyskać do niego dostęp poza granicami domeny aplikacji.Wątek, który próbuje uzyskać blokadę na obiekcie, który ma słabą tożsamość, może zostać zablokowany przez drugi wątek w domenie innej aplikacji, która ma blokady dla tego samego obiektu. |
|
CA2003 |
Zarządzalny wątkek jest traktowany są jako wątek Win32. |
|
CA2004 |
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 to, że nie mają finalizatorów, ale polegają na SafeHandle do sfinalizowania uchwytu systemu operacyjnego dla nich. |
|
CA2006 |
CA2006: Użyj SafeHandle do hermetyzacji zasoby macierzystych |
Wykorzystanie IntPtr w kodzie zarządzanym może wskazywać na potencjalny problem zabezpieczeń i niezawodności.Wszystkich użycia IntPtr muszą być przejrzane w celu ustalenia czy użycie elementu SafeHandle lub podobnej technologii jest wymagane w tym miejscy. |
CA2100 |
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, który jest zbudowany z danych wejściowych użytkownika jest narażony na ataki przez iniekcję SQL. |
|
CA2101 |
CA2101: Określ kierowanie 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 organizuje jawnie ciągu.Może to spowodować potencjalne luki w zabezpieczeniach. |
CA2102 |
CA2102: Przechwytywać wyjątków nie CLSCompliant w ogólne programy obsługi |
Element członkowskich w zestawie, który nie jest oznaczony za pomocą RuntimeCompatibilityAttribute lub jest oznaczony jako RuntimeCompatibility(WrapNonExceptionThrows = false), zawiera blok catch, który obsługuje System.Exception i nie zawiera bezpośrednio następującego, ogólnego bloku "catch". |
CA2103 |
Metoda używa imperatywnych zabezpieczeń i może konstruować uprawnienia za pomocą informacji o stanie lub wartości zwrotnych, które można zmienić, tak długo, jak długo żądanie jest aktywne.Należy używać zabezpieczeń deklaracyjnych wszędzie, gdzie to możliwe. |
|
CA2104 |
CA2104: Nie są deklarowane odczytu odniesienia tylko tych typów |
Typ widoczny z zewnątrz zawiera widoczne z zewnątrz pola tylko do odczytu, które jest typu referencji zmiennej.Typ zmienny to typ, którego dane wystąpienie mogą być modyfikowane. |
CA2105 |
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 |
Metoda potwierdza uprawnienia i żadne sprawdzanie bezpieczeństwa nie są wykonywane na obiekcie wywołującym.Potwierdzanie uprawnienia zabezpieczeń bez wykonywania kontroli zabezpieczeń można pozostawić zdatną do wykorzystania słabość zabezpieczeń w kodzie. |
|
CA2107 |
Metoda PermitOnly i akcje zabezpieczeń CodeAccessPermission.Deny powinny być używane tylko przez tych, którzy mają zaawansowaną wiedze o zabezpieczeniach .NET Framework.Kod, który używa tych akcji zabezpieczeń powinien przejść przegląd zabezpieczeń. |
|
CA2108 |
CA2108: Zabezpieczenia deklaracyjne Przegląd w przypadku typów wartości |
Publiczny lub chroniony typy wartości jest zabezpieczony przez dostęp do danych lub zapotrzebowanie na łącza. |
CA2109 |
Wykryto publiczną lub chronioną metodę obsługi zdarzeń.Metody obsługi zdarzeń nie powinny być udostępnione, chyba że jest to absolutnie konieczne. |
|
CA2111 |
Wskaźnik nie jest prywatny, wewnętrzny lub 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 |
Typ publiczny lub chroniony zawiera pola publiczne i jest zabezpieczony przez zapotrzebowania na łącza.Jeśli kod ma dostęp do wystąpienia typu, który jest zabezpieczony przez zapotrzebowania na łącza, kod nie musi spełniać zapotrzebowania na łącza, aby uzyskać dostęp do pól typu. |
|
CA2114 |
Metoda nie powinna mieć zabezpieczeń deklaratywnych zarówno na poziomie metody i na poziomie typu dla tej samej akcji. |
|
CA2115 |
CA2115: Wywołanie GC.Utrzymywania aktywności podczas korzystania z zasobów macierzystych |
Ta reguła wykrywa błędy, które mogą wystąpić, ponieważ niezarządzany zasób jest zakończony podczas gdy wciąż jest używany w kodzie niezarządzanym. |
CA2116 |
Gdy APTCA (element AllowPartiallyTrustedCallersAttribute) jest obecny zestawie całkowicie zaufanym i wykonuje kod w innym zestawie, który nie zezwala na dostęp częściowo zaufanych wywołań, możliwe jest wykorzystanie luk w bezpieczeństwie. |
|
CA2117 |
CA2117: Typy APTCA powinny rozszerzać tylko typy bazowe APTCA |
Gdy APTCA jest obecna w pełni zaufanym zestawie i typu w zestawie dziedziczy z typu, który nie zezwala na dostęp częściowo zaufanych wywołań, możliwe jest wykorzystanie luk w bezpieczeństwie. |
CA2118 |
CA2118: Użycie Przegląd SuppressUnmanagedCodeSecurityAttribute |
SuppressUnmanagedCodeSecurityAttribute zmienia domyślne zachowanie systemu zabezpieczeń dla elementów członkowskich, które wykonują kod niezarządzany, który używa wywołań międzyoperacyjnych COM lub systemu operacyjnego.Ten atrybut używany jest przede wszystkim do zwiększenia wydajności; jednak wzrost wydajności przychodzi ze znaczącym ryzykiem w bezpieczeństwie. |
CA2119 |
CA2119: Zapieczętować metod zadowalających prywatne interfejsy |
Dziedziczny typ publiczny dostarcza implementację metody, którą można zastąpić, wewnętrznego (Friend w Visual Basic) interfejsu.Aby naprawić naruszenie tej zasady, należy zapobiegać przed zastąpieniem metody poza zestawem. |
CA2120 |
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 więcej regularnych konstruktory typu są zabezpieczone. |
|
CA2121 |
System wywołuje statyczny konstruktor przed stworzeniem pierwszego wystąpienia typu lub przed tym, jak następuje odwołanie 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 |
Element członkowski publiczny lub chronione ma zapotrzebowanie na łącza i jest wywoływany przez element członkowski, który nie sprawdza zabezpieczeń.Zapotrzebowania na łącza sprawdza uprawnienia tylko bezpośredniego wywołującego. |
|
CA2123 |
CA2123: Ustawienie atrybutu LinkDemand powinny być identyczne base |
Ta reguła dopasowywuje metodę do jej metody podstawowej, która jest interfejsem lub metodą wirtualna w innym typie, 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żna pominąć zapotrzebowanie na łącza przez wywołanie niezabezpieczonej metody. |
CA2124 |
CA2124: Oblewanie podatne na koniec klauzul w zewnętrznym spróbuj |
Metoda publiczne lub chronione 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 LinkDemand wymagają dziedziczenie zapotrzebowania |
Niezamkniętych 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: Członków nie powinien mieć konflikt przezroczystość adnotacji |
Krytyczny kod nie może wystąpić w zestawie, który jest w 100% przeźroczysty.Ta reguła analizuje zestawy w 100% przezroczyste dla adnotacji na poziomie typu, pola i metody. |
CA2128 |
CA2147: Przezroczyste metody nie mogą używać zabezpieczeń potwierdza |
Ta reguła analizuje wszystkie metody i typów w zestawie, który jest w 100% przeźroczysty lub mieszany przezroczysto-krytyczny i zaznacza deklaratywne lub imperatywne użycie Assert. |
CA2129 |
CA2140: Przejrzysty kod nie musi odwołać krytycznych elementów zabezpieczeń |
Metody, które są oznaczone przez SecurityTransparentAttribute wywołują niepubliczne elementy członkowskie, które są oznaczone jako SecurityCritical.Ta reguła analizuje wszystkie metody i typy w zestawie, który jest mieszany przezroczysto-krytyczny i oznacza wszelkie wywołania z przezroczystego kodu do niepublicznego krytycznego kodu, który nie jest oznaczony jako SecurityTreatAsSafe. |
CA2130 |
CA2130: Stałe krytycznych 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 krytycznych zabezpieczeń nie mogą uczestniczyć w równoważności typu |
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 występuje na wszystkich typach krytycznych lub typach, które zawierają krytycznych metody lub pola, które uczestniczą w równoważniku typu.Gdy CLR wykryje taki typu, 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 polegać na tlbimp i kompilatorach, aby wykonały równoważnik typu. |
CA2132 |
Typów i elementów członkowskich, których mają SecurityCriticalAttribute, nie można używać przez kod aplikacji Silverlight.Typy krytycznych dla bezpieczeństawa i członkowie mogą być używani tylko przez zaufany kodu w .NET Framework dla biblioteki klas Silverlight.Ponieważ publiczna lub chroniona konstrukcja w klasie pochodnej musi mieć taką samą lub większą przejrzystość niż jego klasa podstawowa, klasy w aplikacji nie mogą pochodzić z klasy oznaczone jako SecurityCritical. |
|
CA2133 |
CA2133: Delegatów należy powiązać metody spójne przejrzystości |
To ostrzeżenie jest zgłaszane na metodzie, która wiąże obiek delegowany, który jest oznaczony za pomocą SecurityCriticalAttribute, do metody, która jest przezroczysta lub oznaczone za pomocą SecuritySafeCriticalAttribute.Ostrzeżenie jest także zgłaszane na metodzie, która wiąże obiekt delegowany, który jest przezroczysty lub bezpieczne-krytyczne do metody krytycznej. |
CA2134 |
CA2134: Metody muszą przechowywać spójne przejrzystości podczas zastępowania metody podstawowej |
Ta reguła jest wykorzystywana, gdy metoda oznaczona za pomocą SecurityCriticalAttribute zastępuje metodę, która jest przezroczysta lub oznaczona za pomocą SecuritySafeCriticalAttribute.Również reguła jest wykorzystywana, gdy metoda, która jest przezroczysta lub oznaczona przy użyciu SecuritySafeCriticalAttribute zastępuje metodę oznaczoną za pomocą SecurityCriticalAttribute.Reguła jest stosowana podczas zastępowania metody wirtualnej lub implementującej interfejs. |
CA2135 |
LinkDemands są przestarzałe w zestawie reguł zabezpieczeń poziomu 2.Zamiast używania LinkDemands do wymuszenia zabezpieczeń w czasie kompilacji JIT, należy oznaczyć metody, typy i póla za pomocą atrybutu SecurityCriticalAttribute. |
|
CA2136 |
CA2136: Członków nie powinien mieć konflikt przezroczystość adnotacji |
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, które mają większy zakres 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, która jest oznaczona za pomocą atrybutu SecuritySafeCriticalAttribute. |
CA2137 |
CA2137: Przezroczyste metod musi zawierać tylko sprawdzalnych IL |
Metoda zawiera nieweryfikowalny kod lub zwraca typ przez odwołanie.Ta reguła jest wykorzystywana kiedy przeźroczysty pod względem zabezpieczeń kod próbuje wykonać niemożliwy do zweryfikowania Microsoft Intermediate Language (MISL).Jednakże reguła nie zawiera pełnej weryfikacji IL i używa heurystyki do wykrywania większości naruszeń weryfikacji MSIL. |
CA2138 |
CA2138: Przezroczyste metody nie musi wywołać metody z atrybutem SuppressUnmanagedCodeSecurity |
Metoda przezroczysta pod względem bezpieczeństwa wywołuje metodę, która jest oznaczona za pomocą atrybutu SuppressUnmanagedCodeSecurityAttribute. |
CA2139 |
CA2139: Przezroczyste metody nie mogą 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 HandleProcessCorruptedStateExceptionsAttribute.Wyjątek uszkadzający proces to klasyfikacja wyjątków CLR wersji 4.0 wątków takich jak AccessViolationException.Atrybut HandleProcessCorruptedStateExceptionsAttribute może być używana tylko przez krytyczny pod względem bezpieczeństwa metody i będą ignorowane jeśli zostaną zastosowane do metody przezroczystych. |
CA2140 |
CA2140: Przejrzysty kod nie musi odwołać krytycznych elementów zabezpieczeń |
Element kodu, który jest oznaczony za pomocą atrybutu SecurityCriticalAttribute jest krytyczny dla bezpieczeństwa.Przezroczysta metoda nie można użyć elementu krytycznego dla zabezpieczeń.Jeśli przezroczysty typ próbuje użyć typu krytycznego dla zabezpieczeń, zgłaszany jest TypeAccessException, MethodAccessException lub FieldAccessException. |
CA2141 |
Przezroczyste 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: Przejrzysty kod powinny być chronione nie z LinkDemands |
Ta reguła jest zgłaszana na przezroczystej metodzie, które wymaga 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: Przezroczyste metody nie należy używać zabezpieczeń zapotrzebowania |
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ń, aby podejmować decyzje związane z zabezpieczeniami i kod krytyczny pod względem zabezpieczeń nie powinien polegać na kodzie przezroczystym, aby wykonywać pełne żądanie. |
CA2144 |
CA2144: Przejrzysty kod nie powinien być ładowany zespołów z tablice bajtów |
Przegląd zabezpieczeń dla kodu przezroczystego nie jest tak kompletny jak kodu krytycznego pod względem bezpieczeństwa, 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żdniejsze, krytyczny dla bezpieczeństwa kod, który musi być poddany inspekcji. |
CA2145 |
CA2145: Przezroczyste metod powinny nie być ozdobione SuppressUnmanagedCodeSecurityAttribute |
Metody, które są oznaczone przez atrybut SuppressUnmanagedCodeSecurityAttribute mają niejawny LinkDemand umieszczony na dowolnej metody, który je wywołuje.Ten LinkDemand wymaga, że kod wywołujący jest krytycznych dla bezpieczeństwa.Oznaczanie metody, która używa SuppressUnmanagedCodeSecurity poprzez używanie 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 typów podstawowych i interfejsów |
Ta reguła jest wykorzystywana, gdy typ pochodny ma atrybut przezroczystości pod względem zabezpieczeń, który nie jest tak tak krytycznyny, 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: Przezroczyste metody nie mogą używać zabezpieczeń potwierdza |
Kod, który jest oznaczony jako SecurityTransparentAttribute, nie ma przyznanego wystarczającego uprawnienia do potwierdzenia. |
CA2149 |
CA2149: Przezroczyste metody nie musi wywołać do kodu macierzystego |
Ta reguła jest wykorzystywana dla każdej przezroczystej metodzie, która wywołuje bezpośrednio kod macierzysty, na przykład poprzez P/Invoke.Naruszenie tej zasady prowadzi do wyjątkuMethodAccessException w poziomie 2 modelu przezroczystości i pełnego żądania dla UnmanagedCode w modelu przezroczystości poziomu 1. |
CA2200 |
Wyjątek jest zgłaszany ponownie i wyjątek jest 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ą metodą zostanie utracona. |
|
CA2201 |
Dzięki temu oryginalny błąd jest trudny do wykrycia i debugowania. |
|
CA2202 |
Implementacja metody zawiera ścieżki kodu, które powodują wielkrotne wywołania do System.IDisposable.Dispose lub równoważnika (na przykład użyciu metody Close() na niektórych typach) dla tego samego obiektu. |
|
CA2204 |
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 |
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 |
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 |
Wywołanie jest zrobione do domyślnego (bezparametrowego) konstruktora typu wyjątku, który jest lub pochodzi od ArgumentException lub niepoprawny ciąg argumentu jest przekazywany do sparametryzowana konstruktora typu wyjątku lub pochodzi od ArgumentException. |
|
CA2210 |
Silna nazwa chroni klientów przed nieświadomym ładowaniem zestawu, który został zmieniony.Zestawy bez mocnej nazwy nie powinny być wdrażane poza bardzo ograniczonymi scenariuszami.Jeśli udostępnia lub dystrybuuje się 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 |
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ępu do obiektu klasy. |
|
CA2212 |
CA2212: Nie należy oznaczać obsługiwanych składników z WebMethod |
Metoda w typie, który dziedziczy z System.EnterpriseServices.ServicedComponent jest oznaczony za pomocą System.Web.Services.WebMethodAttribute.Ponieważ WebMethodAttribute i metoda ServicedComponent mają sprzeczne zachowanie i wymagania dotyczące przepływu kontekstu i transakcji, zachowwanie metod będzie niepoprawne w niektórych scenariuszach. |
CA2213 |
Typ, który implementuje System.IDisposable deklaruje pola, które są typu, który także implementują IDisposable.Metoda Dispose pola nie jest wywoływana przez metodę Dispose typu deklarującego. |
|
CA2214 |
Gdy konstruktora wywołuje metodę wirtualną, konstruktor wystąpienia, który wywołuje metodę mógl nie zostać wykonany. |
|
CA2215 |
CA2215: Metody zbycia powinna wywołać zbycia 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 jednorazowych należy zadeklarować finalizatorów |
Typ, który implementuje System.IDisposable i zawiera pola, które sugerują wykorzystania zasobów niezarządzanych, nie implementuje finalizatora jako opisano w Object.Finalize. |
CA2217 |
Zewnętrznie widoczne wyliczenie jest oznaczone przy użyciu FlagsAttribute i posiada jeden lub więcej wartości, które nie są potęgami dwójki lub kombinacji innych zdefiniowanych wartości z wyliczenia. |
|
CA2218 |
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ą tego samego typu i są równe muszą zwrócić tę samą wartość skrótu. |
|
CA2219 |
Kiedy jest wyjątek jest zgłaszany w klauzuli "finally" lub "fault", nowy wyjątek ukrywa aktywne wyjąteki.Gdy jest 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: Finalizatorów powinna wywołać finalizatorów klasy podstawowej |
Finalizacja musi być powielana w hierarchii dziedziczenia.Aby to zagwarantować, typy muszą wywołać metody Finalize swich klas podstawowych w ich własnej metodzie Finalize. |
CA2221 |
Finalizatory należy użyć modyfikatora dostępu "family". |
|
CA2222 |
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: Członkowie powinna różnić się o więcej niż zwracany typ |
Chociaż CLR pozwala na używanie typów zwracanych do rozróżnienia między inaczej identycznymi członkami, funkcja ta nie jest w specyfikacji języka wspólnego (CLS), ani nie jest wspólną cechą języków programowania .NET. |
CA2224 |
CA2224: Zastępowanie jest równe na przeciążanie operatora równości |
Typ publiczny implementuje operator równości, lecz nie zastępuje metody Object.Equals. |
CA2225 |
Wykryto przeciążony operator i nie znaleziono alternatywnej, oczekiwanie nazwanej metody.Nazwany alternatywny element członkowski udostępnia taką samą funkcjonalność jak operator i jest dostarczony programistom, którz programują w językach, które nie obsługują przeciążonych operatorów. |
|
CA2226 |
CA2226: Podmioty gospodarcze powinny mieć overloads symetryczne |
Typ implementuje operator równości lub nierówności, ale nie implementuje operatora przeciwnego. |
CA2227 |
Właściwości 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 należy dostarczać formaty niepublikowane 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 wersji .NET Framework. |
CA2229 |
Aby naprawić naruszenie tej zasady, należy zaimplementować konstruktor serializacji.Dla zamkniętej klasy, należy ustawić konstruktor prywatnym; w przeciwnym razie powinien być chroniony. |
|
CA2230 |
Typ publiczny lub chroniony zawiera metodę publiczną lub chronioną, która używa wywoływania VarArgs, zamiast słowa kluczowego params. |
|
CA2231 |
CA2231: Operator przeciążenie jest równe na przesłanianie ValueType.Equals |
Typ wartości zastępuje metodę Object.Equals, ale nie implementuje operatora równości. |
CA2232 |
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 |
Nie należy wykonywać operacji arytmetycznych bez uprzedniego sprawdzania argumentów.To zapewnia, że wynik operacji nie jest spoza zakresu możliwych wartości dla typów danych, które są zaangażowane. |
|
CA2234 |
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ącą przeciążoną metodę, która ma parametr System.Uri. |
|
CA2235 |
Pola wystąpienia typu, który nie może być serializowany jest zadeklarowany w typie, który jest możliwy do serializacji. |
|
CA2236 |
Aby naprawić naruszenie tej zasady, należy wywołać metodę GetObjectData typu podstawowego lub konstuktor serializacji z odpowiadajcej metody typu pochodnego lub konstruktora. |
|
CA2237 |
Aby był rozpoznawalny przez CLR jako możliwy do serializacji, typy muszą być oznaczone za pomocą atrybutu SerializableAttribute nawet wtedy, gdy typ używa niestandardowych procedur serializacji poprzez implementację interfejsu ISerializable. |
|
CA2238 |
Metoda, która obsługuje zdarzenie szeregowania nie ma poprawnej sygnatury zwracanego typu lub widoczności. |
|
CA2239 |
Typ ma pole, które jest oznaczone za pomocą atrybutu System.Runtime.Serialization.OptionalFieldAttribute, ale nie zapewnia metod obsługi zdarzeń deserializacji. |
|
CA2240 |
Aby naprawić naruszenie tej zasady, należy się upewnić, że metoda GetObjectData jest widoczna i możliwa do zastąpienia i należy upewnić się, że wszystkie pola wystąpienia są uwzględnione w procesie serializacji lub jawnie oznaczone atrybutem NonSerializedAttribute. |
|
CA2241 |
Argument formatu, który jest przekazany do System.String.Format przekazany nie zawiera elementu format, który odpowiada każdemu obiektowi argumentu lub odwrotnie. |
|
CA2242 |
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: Atrybut literały ciągów powinna analizować poprawnie |
Parametr o typie literału łańcuchowego atrybutu nie analizuje poprawnie adresu URL, identyfikatora GUID lub wersji. |