Sada pravidel Základní pravidla správnosti pro spravovaný kód
Sada pravidel Základní pravidla správnosti se zaměřuje na logické chyby a obvyklé chyby při využití architektury API.Základní pravidla správnosti zahrnují pravidla v sadě pravidel Minimální doporučená pravidla.Další informace naleznete v Sada pravidel Spravovaná doporučená pravidla pro spravovaný kód. Tuto sadu pravidel byste měli zahrnout jako rozříšení seznamu upozornění hlášených minimálními doporučenými pravidly.
Následující tabulka popisuje všechna pravidla v sadě pravidel Základní pravidla správnosti společnosti Microsoft.
Pravidlo |
Description |
---|---|
Typy, které vlastní uvolnitelná pole, by měly být uvolnitelné |
|
Deklarujte správně ovladače událostí |
|
Označte sestavení pomocí AssemblyVersionAttribute |
|
Metody rozhraní by měly být volatelné podřízenými typy |
|
Typy, které vlastní nativní prostředky, by měly být uvolnitelné |
|
Přesuňte volání nespravovaných kódů do třídy NativeMethods |
|
Neskrývejte metody základní třídy |
|
Implementuje správně IDisposable |
|
Nevyvolávejte výjimky v neočekávaných umístěních |
|
Vyhněte se duplicitním akcelerátorům |
|
Vstupní body volání nespravovaného kódu by měly existovat |
|
Volání nespravovaných kódů by neměla být viditelná |
|
Typy automatického rozložení by neměly být viditelné modelu COM |
|
Volejte GetLastError ihned po volání nespravovaného kódu |
|
Základní typy viditelného typu modelu COM by měly být viditelné modelu COM |
|
Metody registrace modelu COM by si měly odpovídat |
|
Deklarujte správně volání nespravovaných kódů |
|
Odstraňte prázdné finalizační metody |
|
Pole hodnotového typu by měla být přenosná |
|
Deklarace volání nespravovaného kódu by měla být přenosná |
|
Nepoužívejte zámky na objekty se slabou identitou |
|
Zkontrolujte dotazy SQL pro chyby zabezpečení |
|
Určete zařazování pro argumenty řetězce volání nespravovaného kódu |
|
Zkontrolujte deklarativní zabezpečení na hodnotových typech |
|
Ukazatele by neměly být viditelné |
|
Zabezpečené typy by neměly vystavovat pole |
|
Zabezpečení metody by mělo být nadmnožinou typu |
|
Metody APTCA by měly volat pouze metody APTCA |
|
Typy APTCA by měly rozšiřovat pouze základní typy APTCA |
|
Nezveřejňujte nepřímo metody s požadavky propojení |
|
Požadavky odkazu přepisu by měly být shodné se základem |
|
Zabalte ohrožené klauzule finally do vnějšího bloku try |
|
Požadavky propojení typů vyžadují požadavky dědičnosti |
|
Důležité typy zabezpečení se nemusí účastnit rovnocennosti typu |
|
Výchozí konstruktory musí být alespoň tak kritické jako výchozí konstruktory základního typu |
|
Delegáti musí navázat na metody s konzistentní transparentností |
|
Metody musí při přepisu základních metod zachovat konzistentní transparentnost |
|
Transparentní metody musí obsahovat pouze ověřitelné IL |
|
Transparentní metody nesmí volat metody s atributem SuppressUnmanagedCodeSecurity |
|
Transparentní kód nesmí odkazovat na důležité položky zabezpečení |
|
Transparentní metody nesmí splňovat LinkDemands |
|
Typy musí být alespoň tak kritické jako jejich rozhraní a základní typy |
|
Transparentní metody nemohou používat bezpečnostní vyhodnocení |
|
Transparentní metody nesmí volat do nativního kódu |
|
Znovu vyvolejte výjimku pro zachování podrobností zásobníku |
|
Neuvolňujte objekty několikrát |
|
Statická pole hodnotového typu inicializujte vloženým kódem |
|
Neoznačujte obsluhované komponenty pomocí WebMethod |
|
Uvolnitelná pole by měla být uvolněna |
|
Nevolejte přepisovatelné metody v konstruktorech |
|
Uvolnitelné typy by měly deklarovat finalizační metodu |
|
Finalizační metody by měly volat finalizační metodu základní třídy |
|
Implementujte konstruktory serializace |
|
Je třeba přetížit operátor rovnosti při přetížení ValueType.Equals |
|
Označte vstupní body modelu Windows Forms pomocí STAThread |
|
Označte všechna neserializovatelná pole |
|
Volejte metody základní třídy na typech ISerializable |
|
Označte typy ISerializable pomocí SerializableAttribute |
|
Implementujte správně metody serializace |
|
Implementujte správně rozhraní ISerializable |
|
Poskytněte správné argumenty metodám formátování |
|
Testujte správně hodnotu NaN |
|
Výčty by měly mít nulovou hodnotu |
|
Je třeba přetížit operátor rovnosti při přetížení sčítání a odečítání |
|
Nepředávejte literály jako lokalizované parametry |
|
Normalizujte řetězce na velká písmena |
|
Neignorujte výsledky metody |
|
Volejte GC.SuppressFinalize správně |
|
Vlastnosti by neměly vracet pole |
|
Testujte prázdné řetězce pomocí délky řetězce |
|
Použijte pouze rozhraní API z cílové architektury |
|
Odeberte volání GC.KeepAlive |
|
Použijte SafeHandle pro zapouzdření nativních zdrojů |
|
Zachycujte výjimky bez CLSCompliant v obecných obslužných rutinách |
|
Nedeklaruje proměnlivé odkazové typy pouze pro čtení |
|
Pole polí by neměla být pouze pro čtení |
|
Zabezpečte výrazy |
|
Volejte GC.KeepAlive při použití nativních zdrojů |
|
Zapečeťte metody, které vyhovují privátním rozhraním |
|
Zabezpečte konstruktory serializace |
|
Statické konstruktory by měly být privátní |
|
Důležité bezpečnostní konstanty by měly být průhledné |
|
Použijte spravované ekvivalenty rozhraní Win32 API |
|
Metody Dispose by měly volat uvolnění základní třídy |
|
Finalizační metody by měly být chráněné |
|
Nesnižujte viditelnost zděděných členů |
|
Členy by se měly lišit o více než jen návratový typ |
|
Přepište metodu rovnosti při přetížení operátoru rovnosti |
|
Operátory by měly mít symetrická přetížení |
|
Vlastnosti vracející kolekce by měly být určeny pouze pro čtení |
|
Poskytněte metody deserializace pro volitelná pole |