Kódminőségi szabályok

A .NET-kódelemzés olyan szabályokat biztosít, amelyek célja a kódminőség javítása. A szabályok olyan területekre vannak rendszerezve, mint a tervezés, a globalizáció, a teljesítmény és a biztonság. Bizonyos szabályok a .NET API használatára vonatkoznak, míg mások az általános kódminőségre vonatkoznak.

Szabályok indexe

Az alábbi táblázat a kódminőség-elemzési szabályokat sorolja fel.

Szabályazonosító és figyelmeztetés Leírás
CA1000: Ne deklarálja a statikus tagokat általános típusok esetében Amikor egy általános típus statikus tagját meghívják, a típus argumentumát meg kell adni a típushoz. Ha olyan általános példánytagot hív meg, amely nem támogatja a következtetést, a típusargumentumot meg kell adni a tag számára. Ebben a két esetben a típusargumentum megadásának szintaxisa eltérő és könnyen összekeverhető.
CA1001: Az eldobható mezőket tartalmazó típusoknak eldobhatónak kell lenniük Az osztály deklarál és implementál egy System.IDisposable típusú példánymezőt, és az osztály nem implementálja az IDisposable-t. Az IDisposable mezőt közvetetten deklaráló osztály nem felügyelt erőforrással rendelkezik, és implementálnia kell az IDisposable interfészt.
CA1002: Ne tegye közzé az általános listákat A System.Collections.Generic.List<(Of <(T>)>) egy általános gyűjtemény, amely teljesítményre, nem öröklésre lett tervezve. Ezért a Lista nem tartalmaz virtuális tagokat. Az öröklésre tervezett általános gyűjteményeket inkább közzé kell tenni.
CA1003: Általános eseménykezelő példányok használata A típus tartalmaz egy olyan meghatalmazottat, aki érvénytelenséget ad vissza, amelynek aláírása két paramétert tartalmaz (az első egy objektumot, a második pedig az EventArgshez rendelhető típust), és az azt tartalmazó szerelvény a Microsoft .NET-keretrendszer 2.0-s verziót célozza.
CA1005: Az általános típusok túlzott paramétereinek elkerülése Minél több típusparamétert tartalmaz egy általános típus, annál nehezebb tudni és megjegyezni, hogy az egyes típusparaméterek mit jelölnek. Ez általában nyilvánvaló egy típusparaméterrel, mint a T> lista<, és bizonyos esetekben, amelyek két típusparaméterrel rendelkeznek, mint a Szótár<TKey, TValue>. Ha azonban kétnál több típusparaméter létezik, a nehézség túl nagy lesz a legtöbb felhasználó számára.
CA1008: Az enumerálásnak nulla értékkel kell rendelkeznie A nem inicializált enumerálás alapértelmezett értéke, csakúgy, mint a többi értéktípus, nulla. A nemflags attribútumú enumerálásnak nullával kell meghatároznia egy tagot, hogy az alapértelmezett érték az enumerálás érvényes értéke legyen. Ha a FlagsAttribute attribútummal rendelkező enumerálás nulla értékű tagot határoz meg, a neve "Nincs", amely azt jelzi, hogy nincs érték beállítva az enumerálásban.
CA1010: A gyűjteményeknek általános felületet kell implementálniuk A gyűjtemények használhatóságának bővítése érdekében implementálja az egyik általános gyűjteményi felületet. Ezután a gyűjtemény általános gyűjteménytípusok feltöltésére használható.
CA1012: Az absztrakt típusok nem lehetnek nyilvános konstruktorok Az absztrakt típusok konstruktorai csak származtatott típusok használatával hívhatók meg. Mivel a nyilvános konstruktorok egy típusú példányokat hoznak létre, és nem hozhatók létre absztrakt típusú példányok, a nyilvános konstruktort tartalmazó absztrakt típus helytelenül van kialakítva.
CA1014: Szerelvények megjelölése a CLSCompliantAttribute használatával A Common Language Specification (CLS) olyan elnevezési korlátozásokat, adattípusokat és szabályokat határoz meg, amelyeknek a szerelvényeknek meg kell felelniük, ha a programozási nyelvek között használják őket. A jó kialakítás azt diktálja, hogy minden szerelvények kifejezetten jelezzék a CLS-megfelelőséget a használatával CLSCompliantAttribute . Ha ez az attribútum nem található meg egy szerelvényen, a szerelvény nem megfelelő.
CA1016: Szerelvények megjelölése AssemblyVersionAttribute használatával A .NET a verziószám használatával egyedileg azonosít egy szerelvényt, és az erősen elnevezett szerelvények típusaihoz kapcsolódik. A verziószám a verzió- és a közzétevői szabályzattal együtt használatos. Alapértelmezés szerint az alkalmazások csak azzal a szerelvényverzióval futnak, amellyel létrehozták őket.
CA1017: Szerelvények megjelölése a ComVisibleAttribute használatával A ComVisibleAttribute határozza meg, hogy a COM-ügyfelek hogyan férnek hozzá a felügyelt kódhoz. A jó kialakítás azt diktálja, hogy a szerelvények explicit módon jelezzék a COM láthatóságát. A COM láthatósága beállítható a teljes szerelvényhez, majd felül lehet bírálni az egyes típusok és típustagok esetében. Ha ez az attribútum nincs jelen, a szerelvény tartalma látható a COM-ügyfelek számára.
CA1018: Attribútumok megjelölése az AttributeUsageAttribute használatával Ha egyéni attribútumot határoz meg, jelölje meg az AttributeUsageAttribute használatával annak jelzésére, hogy a forráskódban hol alkalmazható az egyéni attribútum. Az attribútum jelentése és rendeltetése határozza meg az attribútum érvényes helyét a kódban.
CA1019: Attribútumargumentumok kiegészítőinek definiálása Az attribútumok olyan kötelező argumentumokat határozhatnak meg, amelyeket meg kell adni, amikor az attribútumot egy célra alkalmazza. Ezeket pozícióargumentumoknak is nevezik, mivel az attribútumkonstruktorok helyparaméterekként vannak megadva. Minden kötelező argumentum esetében az attribútumnak egy megfelelő írásvédett tulajdonságot is meg kell adnia, hogy az argumentum értéke lekérhető legyen a végrehajtáskor. Az attribútumok opcionális argumentumokat is definiálhatnak, amelyeket nevesített argumentumoknak is neveznek. Ezeket az argumentumokat a rendszer név alapján adja meg az attribútumkonstruktoroknak, és ennek megfelelő olvasási/írási tulajdonságmal kell rendelkeznie.
CA1021: A paraméterek elkerülése A típusok hivatkozással történő átadása (out vagy ref) használatához tapasztalatra van szükség a mutatókkal, az értéktípusok és a referenciatípusok különbségeinek megértéséhez, valamint a több visszatérési értékkel rendelkező metódusok kezeléséhez. Emellett a kimenő és az újraf paraméter közötti különbség nem széles körben ismert.
CA1024: Adott esetben tulajdonságok használata A nyilvános vagy védett metódusok neve "Get" néven kezdődik, nem vesz fel paramétereket, és olyan értéket ad vissza, amely nem tömb. A módszer lehet egy jó jelölt, hogy váljon egy tulajdonság.
CA1027: Számjelek megjelölése FlagsAttribute használatával Az enumerálás olyan értéktípus, amely a kapcsolódó elnevezett állandók készletét határozza meg. A FlagsAttribute alkalmazása enumerálásra, ha az elnevezett állandók értelmesen kombinálhatók.
CA1028: Az enumerálási tárolónak Int32-nek kell lennie Az enumerálás olyan értéktípus, amely a kapcsolódó elnevezett állandók készletét határozza meg. Alapértelmezés szerint a System.Int32 adattípus az állandó érték tárolására szolgál. Bár módosíthatja ezt a mögöttes típust, a legtöbb forgatókönyv esetében nem kötelező vagy ajánlott.
CA1030: Szükség esetén események használata Ez a szabály olyan metódusokat észlel, amelyek általában eseményekhez használt neveket használnak. Ha egy metódust egyértelműen meghatározott állapotváltozásra válaszul hív meg, a metódust egy eseménykezelőnek kell meghívnia. A metódust meghívó objektumoknak eseményeket kell emelnie a metódus közvetlen meghívása helyett.
CA1031: Ne kapja meg az általános kivételtípusokat Általános kivételeket nem szabad kifogni. Egy konkrétabb kivétel elfogása, vagy az általános kivétel újbóli létrehozása a fogási blokk utolsó utasításaként.
CA1032: Standard kivételkonstruktorok implementálása Ha nem adja meg a konstruktorok teljes készletét, az megnehezítheti a kivételek helyes kezelését.
CA1033: A felületi metódusokat gyermektípusok szerint kell meghívni A külsőleg nem látható típus explicit módon implementál egy nyilvános felületet, és nem nyújt alternatív külsőleg látható metódust, amelynek neve megegyezik.
CA1034: A beágyazott típusok nem lehetnek láthatók A beágyazott típus egy másik típus hatókörében deklarált típus. A beágyazott típusok hasznosnak bizonyulnak a benne található típus privát implementálási részleteinek beágyazásához. Az erre a célra használt beágyazott típusok nem lehetnek külsőleg láthatók.
CA1036: Hasonló típusok felülbírálási módszerei Egy nyilvános vagy védett típus implementálja a System.IComparable felületet. Nem bírálja felül az Object.Equals függvényt, és nem túlterheli a nyelvspecifikus operátort az egyenlőség, az egyenlőtlenség, a kisebb vagy nagyobb érték miatt.
CA1040: Az üres felületek elkerülése Az interfészek olyan tagokat határoznak meg, amelyek viselkedési vagy használati szerződést biztosítanak. Az interfész által leírt funkciók bármilyen típussal alkalmazhatók, függetlenül attól, hogy a típus hol jelenik meg az öröklési hierarchiában. Egy típus implementál egy interfészt úgy, hogy implementációkat biztosít a felület tagjai számára. Az üres felület nem határoz meg tagokat; ezért nem határoz meg végrehajtható szerződést.
CA1041: ElavultAttribute üzenet megadása Egy típus vagy tag egy System.ObsoleteAttribute attribútummal van megjelölve, amely nem rendelkezik megadva az ObsoleteAttribute.Message tulajdonsággal. Az ElavultAttribute használatával megjelölt típus vagy tag fordításakor megjelenik az attribútum Üzenet tulajdonsága. Ez információt ad a felhasználónak az elavult típusról vagy tagról.
CA1043: Integrál vagy sztring argumentum használata indexelőkhöz Az indexelőknek (vagyis az indexelt tulajdonságoknak) integrál- vagy sztringtípusokat kell használniuk az indexhez. Ezeket a típusokat általában az adatstruktúrák indexelésére használják, és növelik a kódtár használhatóságát. Az objektumtípus használatát azokra az esetekre kell korlátozni, amikor az adott integrál- vagy sztringtípus nem határozható meg a tervezéskor.
CA1044: A tulajdonságok nem írhatók csak Bár elfogadható és gyakran szükséges írásvédett tulajdonsággal rendelkezni, a tervezési irányelvek tiltják a írásvédett tulajdonságok használatát. Ennek az az oka, hogy ha egy felhasználó beállít egy értéket, majd megakadályozza, hogy a felhasználó megtekintse ezt az értéket, nem biztosít semmilyen biztonságot. Olvasási hozzáférés nélkül a megosztott objektumok állapota nem tekinthető meg, ami korlátozza a hasznosságukat.
CA1045: Ne adjon át típusokat hivatkozás alapján A típusok hivatkozással (out vagy ref) való átadásához tapasztalatra van szükség a mutatókkal, az értéktípusok és a referenciatípusok különbségeinek megértéséhez, valamint a több visszatérési értékkel rendelkező metódusok kezeléséhez. Az általános közönség számára tervező könyvtártervezők nem várhatják el, hogy a felhasználók jártasak legyenek a használatban out vagy ref a paraméterekben.
CA1046: Ne terhelje túl az operátort a referenciatípusoknál Referenciatípusok esetén az egyenlőségi operátor alapértelmezett megvalósítása szinte mindig helyes. Alapértelmezés szerint két hivatkozás csak akkor egyenlő, ha ugyanarra az objektumra mutatnak.
CA1047: Ne deklaráljon védett tagokat lezárt típusok esetén A típusok védett tagokat deklarálnak, hogy az öröklő típusok elérhessék vagy felülbírálhassák a tagot. Definíció szerint a lezárt típusok nem örökölhetők, ami azt jelenti, hogy a lezárt típusok védett módszerei nem hívhatók meg.
CA1050: Típusok deklarálása névterekben A típusok névterekben vannak deklarálva, hogy megelőzzék a névütközést, és így rendszerezhetők a kapcsolódó típusok egy objektumhierarchiában.
CA1051: Látható példánymezők deklarálása A mező elsődleges használatának implementálási részletként kell lennie. A mezőknek privátnak vagy belsőnek kell lenniük, és tulajdonságok használatával kell elérhetővé tenni őket.
CA1052: A statikus tartótípusokat le kell zárni A nyilvános vagy védett típus csak statikus tagokat tartalmaz, és a lezárt (C# referencia) (NotInheritable) módosítóval nem deklarálható. A nem örökölni kívánt típust a lezárt módosítóval kell megjelölni annak alaptípusként való használatának megakadályozása érdekében.
CA1053: A statikus tartótípusoknak nem szabad konstruktorokkal rendelkezniük A nyilvános vagy beágyazott nyilvános típus csak statikus tagokat deklarál, és nyilvános vagy védett alapértelmezett konstruktorsal rendelkezik. A konstruktor szükségtelen, mert a statikus tagok meghívása nem igényel ilyen típusú példányt. A sztring túlterhelésének az egységes erőforrás-azonosító (URI) túlterhelését kell meghívnia a biztonsági és biztonsági sztring argumentum használatával.
CA1054: Az URI-paraméterek nem lehetnek sztringek Ha egy metódus egy URI sztring-ábrázolását használja, megfelelő túlterhelést kell biztosítani, amely az URI-osztály egy példányát veszi igénybe, amely biztonságos és biztonságos módon biztosítja ezeket a szolgáltatásokat.
CA1055: Az URI visszatérési értékei nem lehetnek sztringek Ez a szabály feltételezi, hogy a metódus URI-t ad vissza. Az URI sztring-ábrázolása hajlamos elemzési és kódolási hibákra, és biztonsági résekhez vezethet. A System.Uri osztály biztonságosan és biztonságosan biztosítja ezeket a szolgáltatásokat.
CA1056: Az URI-tulajdonságok nem lehetnek sztringek Ez a szabály feltételezi, hogy a tulajdonság egy egységes erőforrás-azonosítót (URI) jelöl. Az URI sztring-ábrázolása hajlamos elemzési és kódolási hibákra, és biztonsági résekhez vezethet. A System.Uri osztály biztonságosan és biztonságosan biztosítja ezeket a szolgáltatásokat.
CA1058: A típusok nem terjeszthetik ki bizonyos alaptípusokat A külsőleg látható típus kiterjeszt bizonyos alaptípusokat. Használja az egyik alternatívát.
CA1060: P/Invokes áthelyezése NativeMethods osztályba Platformhívási metódusok, például a System.Runtime.InteropServices.DllImportAttribute attribútummal megjelölt metódusok, vagy a Visual Basicben a Declare kulcsszóval definiált metódusok nem felügyelt kódhoz férnek hozzá. Ezeknek a metódusoknak a NativeMethods, Széf NativeMethods vagy UnsafeNativeMethods osztálynak kell lenniük.
CA1061: Ne rejtse el az alaposztály-metódusokat Az alaptípusban lévő metódusokat egy azonos nevű metódus rejti el egy származtatott típusban, ha a származtatott módszer paraméteraditványa csak olyan típusok szerint különbözik, amelyek gyengébben származnak, mint az alapmetódus paraméter-aláírásában szereplő megfelelő típusok.
CA1062: Nyilvános metódusok argumentumainak ellenőrzése A külsőleg látható metódusoknak átadott összes hivatkozási argumentumot null értékre kell ellenőrizni.
CA1063: Az IDisposable helyes implementálása Minden IDisposable típusnak helyesen kell implementálnia az Elidegenítési mintát.
CA1064: A kivételeknek nyilvánosnak kell lenniük A belső kivétel csak a saját belső hatókörén belül látható. Miután a kivétel kívül esik a belső hatókörön, csak az alapkivétel használható a kivétel elfogásához. Ha a belső kivétel a külső kódtól ExceptionSystemExceptionöröklődik, ApplicationExceptionakkor a külső kód nem rendelkezik elegendő információval ahhoz, hogy tudja, mit tegyen a kivétellel.
CA1065: Ne emeljen kivételeket váratlan helyeken Az a metódus, amely várhatóan nem ad kivételeket, kivételt eredményez.
CA1066: IEquatable implementálása egyenlők felülírásakor Az értéktípus felülbírálja a metódust Equals , de nem implementálja IEquatable<T>.
CA1067: A felülbírálás egyenlő az IEquatable megvalósításakor Egy típus implementálja IEquatable<T>, de nem bírálja felül Equals a metódust.
CA1068: A CancellationToken paramétereknek az utolsónak kell lenniük A metódus olyan CancellationToken paraméterrel rendelkezik, amely nem az utolsó paraméter.
CA1069: A számokat nem szabad duplikálni Az enumerálásnak több tagja van, amelyek explicit módon ugyanazt az állandó értéket kapják.
CA1070: Ne deklarálja az eseménymezőket virtuálisként Egy mezőszerű esemény virtuálisként lett deklarálva.
CA1200: Ne használjon cref-címkéket előtaggal Az XML-dokumentáció címkéjében szereplő cref attribútum "kódhivatkozást" jelent. Meghatározza, hogy a címke belső szövege kódelem, például típus, metódus vagy tulajdonság. Kerülje a címkék előtagokkal való használatát cref , mert megakadályozza, hogy a fordító ellenőrizze a hivatkozásokat. Emellett megakadályozza, hogy a Visual Studio integrált fejlesztési környezete (IDE) megtalálja és frissítse ezeket a szimbólumhivatkozásokat az újrabontások során.
CA1303: Ne adjon át literálokat honosított paraméterekként Egy külsőleg látható metódus paraméterként átad egy sztringkonstanst egy .NET-konstruktornak vagy metódusnak, és ennek a sztringnek honosíthatónak kell lennie.
CA1304: CultureInfo megadása A metódus vagy konstruktor olyan tagot hív meg, aki túlterheléssel rendelkezik, és elfogadja a System.Globalization.CultureInfo paramétert, és a metódus vagy konstruktor nem hívja meg a CultureInfo paramétert használó túlterhelést. Ha egy CultureInfo vagy System.IFormatProvider objektum nincs megadva, előfordulhat, hogy a túlterhelt tag által megadott alapértelmezett érték nem minden területi beállításban a kívánt hatást eredményezi.
CA1305: Az IFormatProvider megadása Egy metódus vagy konstruktor meghív egy vagy több olyan tagot, aki túlterheléssel rendelkezik, és elfogadja a System.IFormatProvider paramétert, és a metódus vagy konstruktor nem hívja meg az IFormatProvider paramétert használó túlterhelést. Ha egy System.Globalization.CultureInfo vagy IFormatProvider objektum nincs megadva, előfordulhat, hogy a túlterhelt tag által megadott alapértelmezett érték nem minden területi beállításban a kívánt hatást eredményezi.
CA1307: StringComparison megadása az egyértelműség érdekében A sztring-összehasonlító műveletek olyan metódust használnak, amely nem állít be StringComparison paramétert.
CA1308: Sztringek nagybetűs normalizálása A sztringeket nagybetűsre kell normalizálni. Egy kis karaktercsoport nem tud kisbetűssé alakítani őket.
CA1309: Az ordinal StringComparison használata A nemlinguisztikus karakterlánc-összehasonlító művelet nem állítja be a StringComparison paramétert ordinali vagy OrdinalIgnoreCase értékre. Ha a paramétert explicit módon StringComparison.Ordinal vagy StringComparison.OrdinalIgnoreCase értékre állítja, a kód gyakran gyorsul, helyesebbé válik, és megbízhatóbbá válik.
CA1310: StringComparison megadása a helyesség érdekében A sztring-összehasonlító művelet olyan metódust használ, amely nem állít be StringComparison paramétert, és alapértelmezés szerint kultúraspecifikus sztring-összehasonlítást használ.
CA1311: Kulturális környezet megadása vagy invariáns verzió használata Adjon meg egy kultúrát, vagy használjon invariáns kultúrát, hogy elkerülje az aktuális kultúrától való implicit függőséget híváskor ToUpper vagy ToLower.
CA1401: A P/Invokes nem lehet látható A nyilvános vagy védett metódusok a System.Runtime.InteropServices.DllImportAttribute attribútummal (a Visual Basic deklarálási kulcsszója által is implementált) system.Runtime.InteropServices.DllImportAttribute attribútummal rendelkezik. Ezeket a módszereket nem szabad felfedni.
CA1416: Platformkompatibilitás ellenőrzése Ha platformfüggetlen API-kat használ egy összetevőn, a kód már nem működik az összes platformon.
CA1417: P/Invokes sztringparamétereken nem használható OutAttribute Az érték OutAttribute szerint átadott sztringparaméterek destabilizálhatják a futtatókörnyezetet, ha a sztring internált sztring.
CA1418: Érvényes platformsztring használata A platformkompatibilitás-elemző érvényes platformnevet és verziót igényel.
CA1419: Adjon meg egy paraméter nélküli konstruktort, amely ugyanolyan látható, mint a System.Runtime.InteropServicesből származtatott konkrét típusok tartalmazó típusa. Széf Handle' Ha olyan paraméter nélküli konstruktort biztosít, amely a forrás által System.Runtime.InteropServices.SafeHandle létrehozott interop megoldások jobb teljesítményt és használatot tesz lehetővé egy olyan típushoz, amely olyan jól látható, mint egy típust tartalmazó típus.
CA1420: A tulajdonság, típus vagy attribútum futásidejű rendezést igényel Az olyan funkciók használata, amelyek futásidejű rendezést igényelnek, amikor a futásidejű rendezés le van tiltva, futásidejű kivételeket eredményez.
CA1421: A metódus futásidejű rendezést használ a DisableRuntimeMarshallingAttribute alkalmazásakor A metódus futásidejű rendezést használ, a futásidejű rendezés pedig kifejezetten le van tiltva.
CA1422: Platformkompatibilitás ellenőrzése Nem ajánlott egy adott operációs rendszerben (verzióban) elavult API meghívása az adott operációs rendszerről (verzió) elérhető hívási helyről.
CA1501: A túlzott öröklés elkerülése Egy típus több mint négy szinttel mélyebb az öröklési hierarchiában. A mélyen beágyazott típushierarchiák nehezen követhetők, értelmezhetők és karbantarthatók.
CA1502: A túlzott összetettség elkerülése Ez a szabály a módszeren keresztül méri a lineárisan független útvonalak számát, amelyet a feltételes ágak száma és összetettsége határoz meg.
CA1505: A nem elérhetetlen kód elkerülése Egy típus vagy metódus alacsony karbantarthatósági index értékkel rendelkezik. Az alacsony karbantarthatósági index azt jelzi, hogy egy típust vagy módszert valószínűleg nehéz fenntartani, és jó választás lenne az újratervezéshez.
CA1506: Kerülje a túlzott osztálykapcsolódást Ez a szabály az osztálykapcsolódást a típus vagy metódus által tartalmazott egyedi típushivatkozások számának megszámlálásával méri.
CA1507: A sztring helyett a név megadása A sztringkonstans nameof argumentumként használható kifejezésként.
CA1508: A nem halott feltételes kód elkerülése Egy metódus feltételes true kóddal rendelkezik, amely mindig futtatáskor vagy false futtatáskor kiértékelhető. Ez a feltétel ágában false lévő nem használt kódhoz vezet.
CA1509: Érvénytelen bejegyzés a kódmetrikák konfigurációs fájljában A kódmetrikaszabályok, például a CA1501, a CA1502, a CA1505 és a CA1506, egy érvénytelen bejegyzéssel rendelkező CodeMetricsConfig.txt konfigurációs fájlt adott meg.
CA1510: Az ArgumentNullException dobássegítő használata A dobás segítői egyszerűbbek és hatékonyabbak, mint if az új kivételpéldányt építő blokkok.
CA1511: Use ArgumentException throw helper A dobás segítői egyszerűbbek és hatékonyabbak, mint if az új kivételpéldányt építő blokkok.
CA1512: Az ArgumentOutOfRangeException dobássegítő használata A dobás segítői egyszerűbbek és hatékonyabbak, mint if az új kivételpéldányt építő blokkok.
CA1513: Az ObjectDisposedException dobási segéd használata A dobás segítői egyszerűbbek és hatékonyabbak, mint if az új kivételpéldányt építő blokkok.
CA1514: Kerülje a redundáns hossz argumentumot Redundáns hosszargumentumot használ a sztring vagy puffer végéhez való szeleteléshez. A számított hossz hibalehetőséget jelenthet, és szükségtelen is.
CA1515: Fontolja meg a nyilvános típusok belsővé tételét Az osztálytárakkal ellentétben az alkalmazás API-jára általában nem hivatkoznak nyilvánosan, így a típusok belsőleg is megjelölhetők.
CA1700: Ne nevezze el a "Fenntartott" enumerálási értékeket Ez a szabály azt feltételezi, hogy a "reserved" nevet tartalmazó enumerálási tag jelenleg nem használatos, hanem egy helyőrző, amelyet egy későbbi verzióban át kell nevezni vagy el kell távolítani. A tagok átnevezése vagy eltávolítása kompatibilitástörő változás.
CA1707: Az azonosítók nem tartalmazhatnak aláhúzásjeleket Konvenció szerint az azonosítónevek nem tartalmazzák az aláhúzásjel (_) karaktert. Ez a szabály ellenőrzi a névtereket, a típusokat, a tagokat és a paramétereket.
CA1708: Az azonosítóknak több esetben kell eltérnie A névterek, típusok, tagok és paraméterek azonosítója nem térhet el csak esetenként, mert a közös nyelvi futtatókörnyezetet megcélzott nyelveknek nem kell megkülönböztetniük a kis- és nagybetűket.
CA1710: Az azonosítóknak helyes utótagokkal kell rendelkezniük Konvenció szerint az egyes alaptípusokat kiterjesztő vagy bizonyos interfészeket megvalósító, illetve az ezekből a típusokból származtatott típusok neve az alaptípushoz vagy interfészhez társított utótaggal rendelkezik.
CA1711: Az azonosítóknak nem szabad helytelen utótagot adni Konvenció szerint csak azoknak a típusoknak a neve, amelyek bizonyos alaptípusokat bővítenek ki, vagy amelyek bizonyos interfészeket implementálnak, vagy amelyek ezekből a típusokból származnak, meghatározott fenntartott utótagokkal végződnek. Más típusnevek nem használhatják ezeket a fenntartott utótagokat.
CA1712: A típusnévvel rendelkező enumerálási értékek előtagja nem Az enumerálási tagok neve nem előtagú a típusnév használatával, mert a fejlesztői eszközök várhatóan típusinformációkat adnak meg.
CA1713: Az események nem lehetnek előtag előtt vagy után Az esemény neve "Előtt" vagy "After" néven kezdődik. Egy adott sorrendben létrehozott kapcsolódó események elnevezéséhez használja a jelenlegi vagy a múltbeli feszültet, hogy jelezze a műveletek sorozatának relatív pozícióját.
CA1714: A jelzők számának többes számú névvel kell rendelkeznie A nyilvános enumerálás a System.FlagsAttribute attribútummal rendelkezik, és a neve nem "s" végződésű. A FlagsAttribute használatával megjelölt típusok neve többes, mert az attribútum azt jelzi, hogy több érték is megadható.
CA1715: Az azonosítóknak megfelelő előtaggal kell rendelkezniük A külsőleg látható felület neve nem "I" nagybetűvel kezdődik. Egy külsőleg látható típus vagy metódus általános típusparaméterének neve nem "T" nagybetűvel kezdődik.
CA1716: Az azonosítók nem felelnek meg a kulcsszavaknak A névtér neve vagy típusneve megegyezik egy fenntartott kulcsszóval egy programozási nyelven. A névterek és a típusok azonosítói nem egyeznek a közös nyelvi futtatókörnyezetet megcélzott nyelvek által definiált kulcsszavakkal.
CA1717: Csak flagsAttribute enumerálásnak kell többes számú névvel rendelkeznie Az elnevezési konvenciók azt diktálják, hogy az enumerálás többes számú neve azt jelzi, hogy az enumerálás több értéke is megadható egyszerre.
CA1720: Az azonosítók nem tartalmazhatnak típusneveket Egy külsőleg látható tag paraméterének neve tartalmaz egy adattípusnevet, vagy egy külsőleg látható tag neve egy nyelvspecifikus adattípusnevet tartalmaz.
CA1721: A tulajdonságnevek nem egyeznek a get metódusok között A nyilvános vagy védett tagok neve a "Get" betűvel kezdődik, és más módon megegyezik egy nyilvános vagy védett tulajdonság nevével. A "Get" metódusoknak és tulajdonságoknak olyan névvel kell rendelkezniük, amelyek egyértelműen megkülönböztetik a függvényüket.
CA1724: A típusnevek nem egyeznek a névterek használatával A típusnevek nem egyeznek a .NET-névterek nevével. A szabály megsértése csökkentheti a kódtár használhatóságát.
CA1725: A paraméterek nevének meg kell egyeznie az alapdeklarációval A paraméterek egységes elnevezése a felülbírálási hierarchiában növeli a metódus felülbírálásainak használhatóságát. A származtatott metódus azon paraméterneve, amely eltér az alapdeklarációban szereplő névtől, zavart okozhat abban, hogy a metódus az alapmetódus felülbírálása vagy a metódus új túlterhelése.
CA1727: PascalCase használata elnevezett helyőrzőkhöz A PascalCase használatával elnevezett helyőrzőket használhat a naplózási üzenetsablonban.
CA1801: A nem használt paraméterek áttekintése A metódus-aláírás olyan paramétert tartalmaz, amely nem szerepel a metódus törzsében.
CA1802: Szükség esetén literálok használata A mezők deklarálása statikus és írásvédett (a Visual Basicben megosztott és írásvédett), és egy fordítási időpontban kiszámítható érték használatával inicializálódik. Mivel a célmezőhöz rendelt érték fordításkor megbízható, módosítsa a deklarációt const (Const in Visual Basic) mezőre, hogy az érték fordításkor legyen kiszámítva a futási idő helyett.
CA1805: Ne inicializálja feleslegesen A .NET-futtatókörnyezet a konstruktor futtatása előtt inicializálja a referenciatípusok összes mezőjét az alapértelmezett értékükre. A legtöbb esetben egy mező explicit inicializálása az alapértelmezett értékre redundáns, ami növeli a karbantartási költségeket, és csökkentheti a teljesítményt (például nagyobb szerelvényméret esetén).
CA1806: Ne hagyja figyelmen kívül a metódus eredményeit A rendszer létrehoz egy új objektumot, de soha nem használja; vagy egy új sztringet létrehozó és visszaadó metódust hív meg a rendszer, és az új sztring soha nem lesz használva; vagy egy COM vagy P/Invoke metódus soha nem használt HRESULT vagy hibakódot ad vissza.
CA1810: Referenciatípus statikus mezőinek inicializálása beágyazottan Amikor egy típus explicit statikus konstruktort deklarál, a just-in-time (JIT) fordító egy ellenőrzést ad hozzá a típus minden egyes statikus metódusához és példánykonstruktorához, hogy meggyőződjön arról, hogy a statikus konstruktort korábban meghívták. A statikus konstruktor-ellenőrzések csökkenthetik a teljesítményt.
CA1812: A nem telepített belső osztályok elkerülése A szerelvényszintű példányokat nem kód hozza létre a szerelvényben.
CA1813: A nem hozzárendelt attribútumok elkerülése A .NET metódusokat biztosít az egyéni attribútumok lekéréséhez. Ezek a metódusok alapértelmezés szerint az attribútumöröklési hierarchiában keresnek. Az attribútum zárolása megszünteti a keresést az öröklési hierarchián keresztül, és javíthatja a teljesítményt.
CA1814: A többdimenziós tömbök előnyben részesítésében A szaggatott tömb olyan tömb, amelynek elemei tömbök. Az elemeket alkotó tömbök különböző méretűek lehetnek, ami egyes adathalmazok számára kevesebb felesleges helyet eredményez.
CA1815: Az értéktípusok felülbírálása egyenlő, az operátor pedig egyenlő Értéktípusok esetén az Egyenlőség öröklött implementációja a Önkifejezés ion könyvtárat használja, és összehasonlítja az összes mező tartalmát. Önkifejezés számítás költséges, és az egyenlőség minden mezőjének összehasonlítása szükségtelen lehet. Ha arra számít, hogy a felhasználók összehasonlítják vagy rendezik a példányokat, vagy kivonattáblakulcsként használják a példányokat, az értéktípusnak egyenlőségeket kell implementálnia.
CA1816: GC hívása. A megfelelő elnyomásifinalizálás Az Dispose implementációját képező metódus nem hívja meg a GC-t. Elfojtás–definíció; vagy olyan metódus, amely nem implementációja a GC-nek. Elfojtás–definíció; vagy egy metódus meghívja a GC-t. A SuppressFinalize és a passz valami más, mint ez (Én a Visual Basicben).
CA1819: A tulajdonságok nem adnak vissza tömböket A tulajdonságok által visszaadott tömbök írásvédettek, még akkor sem, ha a tulajdonság írásvédett. A tömb illetéktelen hozzáférésének megőrzéséhez a tulajdonságnak vissza kell adnia a tömb egy példányát. A felhasználók általában nem fogják megérteni az ilyen tulajdonság meghívásának kedvezőtlen teljesítménybeli következményeit.
CA1820: Üres sztringek tesztelése karakterlánchossz használatával A sztringek összehasonlítása a String.Length tulajdonság vagy a String.IsNullOrEmpty metódus használatával jelentősen gyorsabb, mint az Egyenlők használata.
CA1821: Üres véglegesítők eltávolítása Amikor csak lehetséges, kerülje a véglegesítőket az objektum élettartamának nyomon követésével járó többletterhelés miatt. Az üres véglegesítő többletterhelést okoz, és nem jár előnyökkel.
CA1822: Tagok megjelölése statikusként Azok a tagok, amelyek nem férnek hozzá a példányadatokhoz vagy a híváspéldány-metódusokhoz, statikusként (a Visual Basicben megosztva) jelölhetők meg. Miután statikusként jelölte meg a metódusokat, a fordító nemvirtual hívási webhelyeket bocsát ki ezeknek a tagoknak. Ez mérhető teljesítménynövekedést biztosíthat a teljesítményérzékeny kódhoz.
CA1823: A nem használt privát mezők elkerülése A rendszer olyan privát mezőket észlelt, amelyek nem jelennek meg a szerelvényben.
CA1824: Szerelvények megjelölése a NeutralResourcesLanguageAttribute használatával A NeutralResourcesLanguage attribútum tájékoztatja az erőforrás-kezelőt arról a nyelvről, amely egy szerelvény semleges kultúrájának erőforrásainak megjelenítésére szolgál. Ez javítja az első betölthető erőforrás keresési teljesítményét, és csökkentheti a munkakészletet.
CA1825: A nulla hosszúságú tömbfoglalások elkerülése A nulla hosszúságú tömb inicializálása szükségtelen memóriafoglaláshoz vezet. Ehelyett használja a statikusan lefoglalt üres tömbpéldányt a hívással Array.Empty. A memóriafoglalás a metódus összes meghívása között meg van osztva.
CA1826: Tulajdonság használata a Linq Enumerable metódus helyett Enumerable A LINQ metódust olyan típuson használták, amely egy egyenértékű, hatékonyabb tulajdonságot támogat.
CA1827: Ne használja a Count/LongCount függvényt, ha bármelyik használható Count vagy LongCount olyan módszert használtak, ahol Any a módszer hatékonyabb lenne.
CA1828: Ne használja a CountAsync/LongCountAsync parancsot, ha az AnyAsync használható CountAsync vagy LongCountAsync olyan módszert használtak, ahol AnyAsync a módszer hatékonyabb lenne.
CA1829: Az Enumerable.Count metódus helyett használja a Length/Count tulajdonságot Count A LINQ metódust egy egyenértékű, hatékonyabb Length vagy Count tulajdonságot támogató típuson használták.
CA1830: Előnyben részesítse az erősen gépelt Hozzáfűzés és Beszúrás metódus túlterhelését a StringBuilderen Append és Insert túlterheltségeket biztosít több típushoz a következőn túl String. Ha lehetséges, a ToString() és a sztringalapú túlterhelés helyett inkább az erősen gépelt túlterheléseket részesítse előnyben.
CA1831: Ha szükséges, tartományalapú indexelők helyett AsSpan használata sztringekhez Ha tartományindexelőt használ egy sztringen, és implicit módon rendeli hozzá az értéket a ReadOnlySpan<karaktertípushoz>, a metódust fogja használni Slicea rendszerSubstring, amely a sztring kért részének másolatát állítja elő.
CA1832: Tartományalapú indexelők helyett AsSpan vagy AsMemory használata a tömb ReadOnlySpan vagy ReadOnlyMemory részének lekéréséhez Ha tartományindexelőt használ egy tömbön, és implicit módon hozzárendeli az értéket egy ReadOnlySpan<T> vagy ReadOnlyMemory<T> egy típushoz, a rendszer a metódust GetSubArraySlicefogja használni, amely a tömb kért részének másolatát állítja elő.
CA1833: Tartományalapú indexelők helyett AsSpan vagy AsMemory használata tömb span vagy memória részének lekéréséhez Ha tartományindexelőt használ egy tömbön, és implicit módon hozzárendeli az értéket egy Span<T> vagy Memory<T> egy típushoz, a rendszer a metódust GetSubArraySlicefogja használni, amely a tömb kért részének másolatát állítja elő.
CA1834: StringBuilder.Append(char) használata egy karakteres sztringekhez StringBuilder túlterhelése Append van, amely az argumentumát veszi figyelembe char . Inkább teljesítménybeli okokból hívja meg a char túlterhelést.
CA1835: A "ReadAsync" és a "WriteAsync" memóriaalapú túlterheléseinek előnyben részesítése A "Stream" egy "ReadAsync" túlterheléssel rendelkezik, amely első argumentumként egy "Memória<bájtot>" vesz fel, és egy "WriteAsync" túlterhelést, amely első argumentumként egy "ReadOnlyMemory<Byte>"-t vesz fel. Inkább hívja meg a memóriaalapú túlterheléseket, amelyek hatékonyabbak.
CA1836: Előnyben részesítés IsEmpty , Count ha elérhető Előnyben részesítse IsEmpty a hatékonyabb tulajdonságot, LengthCount<TSource>(IEnumerable<TSource>) vagy CountLongCount<TSource>(IEnumerable<TSource>) állapítsa meg, hogy az objektum tartalmaz-e elemeket.
CA1837: Használat Environment.ProcessId helyett Process.GetCurrentProcess().Id Environment.ProcessId egyszerűbb és gyorsabb, mint Process.GetCurrentProcess().Ida .
CA1838: A P/Invokes paramétereinek elkerülése StringBuilder A "StringBuilder" rendezése mindig létrehoz egy natív pufferpéldányt, ami több foglalást eredményez egy rendezési művelethez.
CA1839: A Environment.ProcessPath használata a Process.GetCurrentProcess() helyett. MainModule.FileName Environment.ProcessPath egyszerűbb és gyorsabb, mint Process.GetCurrentProcess().MainModule.FileNamea .
CA1840: A Environment.CurrentManagedThreadId használata Thread.CurrentThread.ManagedThreadId helyett Environment.CurrentManagedThreadId kompaktabb és hatékonyabb, mint Thread.CurrentThread.ManagedThreadIda .
CA1841: A szótár használata metódusokat tartalmaz A hívás Contains vagy a ValuesKeys gyűjtemény gyakran drágább lehet, mint a hívás ContainsKey vagy ContainsValue a szótár.
CA1842: Ne használja az "WhenAll" műveletet egyetlen tevékenységgel Ha egyetlen tevékenységgel használ, WhenAll teljesítménycsökkenést okozhat. Várjon vagy adja vissza a feladatot.
CA1843: Ne használja a "WaitAll" műveletet egyetlen tevékenységgel Ha egyetlen tevékenységgel használ, WaitAll teljesítménycsökkenést okozhat. Várjon vagy adja vissza a feladatot.
CA1844: Az aszinkron metódusok memóriaalapú felülbírálásának biztosítása a Stream alosztályozása során A teljesítmény javítása érdekében felülbírálja a memóriaalapú aszinkron metódusokat a Stream alosztályozása során. Ezután implementálja a tömbalapú metódusokat a memóriaalapú metódusok tekintetében.
CA1845: Span-alapú sztring használata. Összefűzés" Hatékonyabb az összefűzési operátor használata AsSpan és string.Concathelyett Substring .
CA1846: Előnyben részesítés AsSpanSubstring AsSpan hatékonyabb, mint Substringa . Substring O(n) sztringmásolást hajt végre, miközben AsSpan nem, és állandó költséggel rendelkezik. AsSpan sem végez halomfoglalást.
CA1847: Karakterkonstans használata egyetlen karakterkereséshez Használja string.Contains(char) ahelyett string.Contains(string) , hogy egyetlen karaktert keresnél.
CA1848: A LoggerMessage-meghatalmazottak használata A jobb teljesítmény érdekében használja a LoggerMessage meghatalmazottakat.
CA1849: Aszinkron metódusok meghívása aszinkron metódusokban A már aszinkron metódusokban a más metódusokra irányuló hívásokat aszinkron verziójukra kell meghívni, ahol léteznek.
CA1850: A statikus HashData metódus előnyben részesítve ComputeHash Hatékonyabb a statikus HashData metódus használata egy meghívandó ComputeHashpéldány létrehozása és kezelése soránHashAlgorithm.
CA1851: A gyűjtemény lehetséges több enumerálása IEnumerable A gyűjtemény lehetséges több enumerációja IEnumerable . Érdemes lehet olyan implementációt használni, amely elkerüli a több enumerálást.
CA1852: Belső típusok lezárása Az a típus, amely nem érhető el a szerelvényen kívül, és nem tartalmaz altípusokat a szerelvényen belül, nincs lezárva.
CA1853: A Dictionary.ContainsKey(key)" szükségtelen hívása Nem kell őrködni Dictionary.Remove(key) vele Dictionary.ContainsKey(key). Dictionary<TKey,TValue>.Remove(TKey) már ellenőrzi, hogy a kulcs létezik-e, és nem dobja-e, ha nem létezik.
CA1854: Az "IDictionary.TryGetValue(TKey, out TValue)" metódus használata A "TryGetValue"-t előnyben részesítse a szótár-indexelő hozzáféréssel szemben, amelyet egy "ContainsKey" ellenőrzés véd. Az "ContainsKey" és az indexelő is megkeresi a kulcsot, így a "TryGetValue" használata elkerüli a további kereséseket.
CA1855: A Span<T> használata. Clear() helyett Span<T>. Kitöltés() Hatékonyabb a hívás Span<T>.Clear() , mint meghívni Span<T>.Fill(T) a span elemeinek alapértelmezett értékkel való kitöltését.
CA1856: A ConstantExpected attribútum helytelen használata Az ConstantExpectedAttribute attribútum nincs megfelelően alkalmazva egy paraméterre.
CA1857: A paraméter állandót vár az optimális teljesítményhez Érvénytelen argumentumot ad át a rendszer egy jegyzettel ellátott paraméternek ConstantExpectedAttribute.
CA1858: A StartsWith használata IndexOf helyett Hatékonyabb a hívás String.StartsWith , mint a hívás String.IndexOf annak ellenőrzéséhez, hogy egy sztring egy adott előtaggal kezdődik-e.
CA1859: Ha lehetséges, használjon konkrét típusokat a jobb teljesítmény érdekében A kód felülettípusokat vagy absztrakt típusokat használ, ami szükségtelen felületi hívásokhoz vagy virtuális hívásokhoz vezet.
CA1860: Kerülje az "Enumerable.Any()" bővítménymetódus használatát Hatékonyabb és egyértelműbb a használata Length, Countvagy IsEmpty (ha lehetséges), mint annak meghatározására, Enumerable.Any hogy egy gyűjteménytípus rendelkezik-e elemekkel.
CA1861: Az állandó tömbök argumentumként való elkerülése Az argumentumként átadott állandó tömbök nem lesznek újra felhasználhatók, ami teljesítményterhelést jelent. A teljesítmény javítása érdekében érdemes lehet "statikus írásvédett" mezőkre kinyerni őket.
CA1862: A "StringComparison" metódus túlterhelésének használata a kis- és nagybetűk megkülönböztetésére vonatkozó sztringek összehasonlításához Kódhívások ToLower() vagy kis- és ToUpper() nagybetűk közötti érzéketlen sztring-összehasonlítás végrehajtásakor a rendszer szükségtelen lefoglalást hajt végre.
CA1863: A "CompositeFormat" használata A formázási költség csökkentése érdekében gyorsítótárazza és használja a példányt CompositeFormat argumentumként String.FormatStringBuilder.AppendFormatvagy .
CA1864: Az "IDictionary.TryAdd(TKey, TValue)" metódus használata Mindkettőt Dictionary<TKey,TValue>.ContainsKey(TKey) , és Dictionary<TKey,TValue>.Add végezze el a redundáns kereséseket. Hatékonyabb a hívás Dictionary<TKey,TValue>.TryAdd, amely bool azt jelzi, hogy az érték hozzáadva lett-e, vagy sem. TryAdd nem írja felül a kulcs értékét, ha a kulcs már létezik.
CA1865-CA1867: Karakter túlterhelés használata A karakter túlterhelése jobban teljesít túlterhelést egy sztringnél egyetlen karakterrel.
CA1868: A "Contains" szükségtelen hívása a készletekhez Mindkettőt ISet<T>.Add(T) , és ICollection<T>.Remove(T) végezzen kereséseket, ami feleslegessé teszi a hívásokat ICollection<T>.Contains(T) előre. Hatékonyabb a hívás vagy Remove(T) a közvetlen hívásAdd(T), amely logikai értéket ad vissza, amely jelzi, hogy az elem hozzáadva vagy eltávolítva lett-e.
CA1869: A JsonSerializerOptions példányainak gyorsítótárazása és újrafelhasználása A szerializáláshoz vagy deszerializáláshoz használt helyi példány JsonSerializerOptions jelentősen csökkentheti az alkalmazás teljesítményét, ha a kód többször fut, mivel a System.Text.Json belsőleg gyorsítótárazza a szerializációval kapcsolatos metaadatokat a megadott példányba.
CA1870: Gyorsítótárazott "SearchValues" példány használata A gyorsítótárazott SearchValues<T> példányok használata hatékonyabb, mint az értékek közvetlenül az IndexOfAny vagy az ContainsAny értékének átadása.
CA1871: Ne adjon át null értékű szerkezetet az "ArgumentNullException.ThrowIfNull" értéknek Az 'ArgumentNullException.ThrowIfNull' egy "objektumot" fogad el, ezért egy null értékű szerkezet átadása miatt az érték be van jelölve.
CA1872: A "Convert.ToHexString" és a "Convert.ToHexStringLower" helyett a "BitConverter.ToString" alapú hívásláncok Bájtok hexadecimális sztringre való kódolása vagy Convert.ToHexStringLower kódolásaConvert.ToHexString. Ezek a módszerek hatékonyabbak és kiosztásbarátabbak, mint BitConverter.ToStringString.Replace a kötőjelek és String.ToLowera .
CA2000: Objektumokat szabadít fel a hatókör elvesztése előtt Mivel olyan kivételes esemény fordulhat elő, amely megakadályozza egy objektum véglegesítőjének futását, az objektumot explicit módon kell megsemmisíteni, mielőtt az összes rá mutató hivatkozás hatókörön kívül lenne.
CA2002: Ne zárolja a gyenge identitású objektumokat A rendszer azt állítja, hogy egy objektum gyenge identitással rendelkezik, ha közvetlenül elérhető az alkalmazás tartományhatárai között. A gyenge identitással rendelkező objektumok zárolását lekérni próbáló szálakat egy másik alkalmazástartomány második szála blokkolhatja, amely ugyanahhoz az objektumhoz van zárolva.
CA2007: Ne várjon közvetlenül tevékenységre Az aszinkron metódus közvetlenül vár.Task Ha egy aszinkron metódus közvetlenül vár egy Task adott műveletre, a folytatás ugyanabban a szálban történik, amely létrehozta a feladatot. Ez a viselkedés a teljesítmény szempontjából költséges lehet, és holtpontot eredményezhet a felhasználói felületen. Fontolja meg a meghívást Task.ConfigureAwait(Boolean) , hogy jelezhesse a folytatási szándékát.
CA2008: Ne hozzon létre feladatokat TaskScheduler átadása nélkül A tevékenységlétrehozási vagy -folytatási művelet olyan metódust használ, amely nem ad meg paramétert TaskScheduler .
CA2009: Ne hívja meg a ToImmutableCollection függvényt egy nem módosíthatóCollection értéken ToImmutable metódust szükségtelenül meghívtak egy névtérből származó nem módosítható gyűjteményre System.Collections.Immutable .
CA2011: Ne rendeljen hozzá tulajdonságot a setteren belül Egy tulajdonság véletlenül hozzárendelt egy értéket a saját készletéhez.
CA2012: ValueTasks helyes használata A tagkihívásokból visszaadott ValueTask-elemeket közvetlenül várjuk. A ValueTask többszöri felhasználására vagy az eredmény közvetlen elérésére tett kísérletek, mielőtt az ismert módon befejeződne, kivételt vagy sérülést okozhatnak. Az ilyen ValueTask figyelmen kívül hagyása valószínűleg egy funkcionális hiba jele, és ronthatja a teljesítményt.
CA2013: Ne használja a ReferenceEqualst értéktípusokkal Ha az objA és az objB értéktípussal System.Object.ReferenceEqualshasonlítja össze az értékeket, a rendszer a metódusnak ReferenceEquals való továbbítás előtt be van jelölve. Ez azt jelenti, hogy még ha az objA és az objB is ugyanazt az értéktípus-példányt képviseli, a ReferenceEquals metódus ennek ellenére hamis értéket ad vissza.
CA2014: Ne használjon stackallocot hurkokban. A stackalloc által lefoglalt veremterület csak az aktuális metódus meghívásának végén szabadul fel. A hurokban való használat kötetlen veremnövekedést és végső verem túlcsordulási feltételeket eredményezhet.
CA2015: Ne definiáljon véglegesítőket a MemoryManager<T-ből származtatott típusokhoz> Ha véglegesítőt ad hozzá egy olyan típushoz, amelyből MemoryManager<T> származik, akkor a memória felszabadítható, miközben még használatban van egy Span<T>.
CA2016: A CancellationToken paraméter továbbítása olyan metódusok felé, amelyek egy Továbbítsa a CancellationToken paramétert az olyan metódusok felé, amelyek biztosítják a művelettörlési értesítések megfelelő propagálását, vagy explicit módon adják át CancellationToken.None , hogy jelezzék, szándékosan nem propagálja a jogkivonatot.
CA2017: A paraméterek száma nem egyezik A naplózási üzenetsablonban megadott paraméterek száma nem egyezik meg az elnevezett helyőrzők számával.
CA2018: A count másolandó Buffer.BlockCopy bájtok számát meghatározó argumentum A használat során Buffer.BlockCopyaz count argumentum a másolandó bájtok számát adja meg. Csak olyan count tömbök argumentumához használhatóArray.Length, amelyek elemei pontosan egy bájt méretűek. byte, sbyteés bool a tömbök egy bájt méretű elemeket tartalmaznak.
CA2019: ThreadStatic a mezők nem használhatnak beágyazott inicializálást A jegyzetekkel ellátott ThreadStaticAttribute mezők inicializálva lesznek beágyazottan vagy explicit módon egy static (Shared Visual Basic) konstruktorban.
CA2020: Az IntPtr/UIntPtr beépített operátorai által okozott viselkedésváltozás megakadályozása A .NET 7-ben hozzáadott egyes beépített operátorok eltérően viselkednek, mint a felhasználó által definiált operátorok a .NET 6-ban és a korábbi verziókban. Egyes operátorok, amelyek korábban nem ellenőrzött környezetbe dobtak túlcsordulás közben, nem dobtak többé, hacsak be nem csomagolták az ellenőrzött környezetbe. Egyes operátorok, amelyek korábban nem dobtak be ellenőrzött környezetet, most csak akkor dobnak, ha nem ellenőrzött környezetbe vannak csomagolva.
CA2021: Ne hívja meg az Enumerable.Cast<T> vagy az Enumerable.OfType<T> inkompatibilis típusokat Olyan típusparaméter hívása Enumerable.Cast<TResult>(IEnumerable) vagy Enumerable.OfType<TResult>(IEnumerable) megadása, amely nem kompatibilis a bemeneti gyűjtemény típusával.
CA2100: Sql-lekérdezések áttekintése biztonsági rések esetén Egy metódus a System.Data.IDbCommand.CommandText tulajdonságot egy sztringargumentumból a metódusba épített sztring használatával állítja be. Ez a szabály feltételezi, hogy a sztring argumentum felhasználói bemenetet tartalmaz. A felhasználói bemenetből létrehozott SQL-parancssztring sebezhető az SQL-injektálási támadásokkal szemben.
CA2101: P/Invoke sztringargumentumok rendezési beállításának megadása A platformmeghívó tagok részlegesen megbízható hívókat engedélyeznek, sztringparaméterrel rendelkezik, és nem végzi el explicit módon a sztringet. Ez biztonsági rést okozhat.
CA2109: Látható eseménykezelők áttekintése A rendszer nyilvános vagy védett eseménykezelési módszert észlelt. Az eseménykezelési módszereket csak akkor szabad felfedni, ha feltétlenül szükséges.
CA2119: Privát felületeknek megfelelő tömítési módszerek Az örökölhető nyilvános típus egy belső (Barát a Visual Basicben) felület felülírható metódusát biztosítja. A szabály megsértésének kijavításához megakadályozza, hogy a metódus felül legyen bírálva a szerelvényen kívül.
CA2153: A sérült állapot kivételei kezelésének elkerülése A sérült állapotkivételek (C Standard kiadás) azt jelzik, hogy a folyamat memóriasérülést jelez. Ha ezeket észleli ahelyett, hogy lehetővé tenné a folyamat összeomlását, biztonsági résekhez vezethet, ha a támadó biztonsági réseket helyezhet el a sérült memóriaterületen.
CA2200: Újrafedés a verem részleteinek megőrzése érdekében A kivétel újra létre lesz adva, és a kivétel explicit módon meg van adva a dobás utasításában. Ha a kivételt a dobási utasításban megadott kivétel megadásával ismét meg kell ismételni, a metódushívások listája elveszik a kivételt eldobó eredeti metódus és az aktuális metódus között.
CA2201: Ne emeljen fenntartott kivételtípusokat Ez megnehezíti az eredeti hiba észlelését és hibakeresését.
CA2207: Értéktípus statikus mezőinek inicializálása beágyazottan Egy értéktípus explicit statikus konstruktort deklarál. A szabály megsértésének kijavításához inicializálja az összes statikus adatot a deklaráláskor, és távolítsa el a statikus konstruktort.
CA2208: Argumentum-kivételek helyes példányosítása A rendszer meghívja a kivételtípus alapértelmezett (paraméter nélküli) konstruktorát, amely abból származik ArgumentException, vagy helytelen sztringargumentumot ad át egy paraméteres konstruktornak egy olyan kivételtípus paraméteres konstruktorának, amelyből származik vagy származik ArgumentException.
CA2211: A nem állandó mezők nem lehetnek láthatók A nem állandó vagy írásvédett statikus mezők nem szálbiztosak. Az ilyen mezőkhöz való hozzáférést gondosan szabályozni kell, és speciális programozási technikákat igényel az osztályobjektumhoz való hozzáférés szinkronizálásához.
CA2213: Eldobható mezőket kell megsemmisíteni A System.IDisposable-t megvalósító típus deklarálja az IDisposable-t is megvalósító típusú mezőket. A mező Elidegenítési metódusát nem a deklarálási típus Elidegenítési metódusa hívja meg.
CA2214: A konstruktorokban ne hívja meg a felülírható metódusokat Amikor egy konstruktor virtuális metódust hív meg, előfordulhat, hogy a metódust meghívó példány konstruktora nem lett végrehajtva.
CA2215: Az elidegenítési módszereknek alaposztály-elidegenítést kell hívniuk Ha egy típus egy eldobható típustól öröklődik, a saját Elidegenítési metódusától kell meghívnia az alaptípus Elidegenítési metódusát.
CA2216: Az eldobható típusoknak véglegesítőt kell deklarálniuk A System.IDisposable-t implementáló és a nem felügyelt erőforrások használatára utaló mezőket tartalmazó típus nem implementál véglegesítőt az Object.Finalize által leírtak szerint.
CA2217: Ne jelölje meg a számokat a FlagsAttribute használatával A külsőleg látható enumerálás a FlagsAttribute használatával van megjelölve, és egy vagy több olyan értékkel rendelkezik, amely nem két vagy a többi definiált érték kombinációja az enumerálásban.
CA2218: A GetHashCode felülbírálása egyenlők felülbírálásakor Nyilvános típusú felülbírálások System.Object.Equals , de nem felülbírálják System.Object.GetHashCode.
CA2219: Ne emelj kivételeket a kivételkikötésekben Ha a rendszer kivételt hoz létre egy végső vagy tartalék záradékban, az új kivétel elrejti az aktív kivételt. Ha egy szűrőzáradék kivételt hoz létre, a futtatókörnyezet csendesen elkapja a kivételt. Ez megnehezíti az eredeti hiba észlelését és hibakeresését.
CA2224: A felülbírálás egyenlő a túlterhelési operátor egyenlő A nyilvános típus implementálja az egyenlőségi operátort, de nem bírálja felül System.Object.Equals.
CA2225: Az operátorok túlterhelései alternatívokat neveztek el A rendszer túlterhelést észlelt, és a várt alternatív metódus nem található. A nevesített alternatív tag ugyanazokat a funkciókat biztosítja, mint az operátor, és olyan fejlesztők számára érhető el, akik olyan nyelveken programozzanak, amelyek nem támogatják a túlterhelt operátorokat.
CA2226: Az operátoroknak szimmetrikus túlterhelésekkel kell rendelkezniük Egy típus megvalósítja az egyenlőségi vagy egyenlőtlenségi operátort, és nem valósítja meg az ellenkező operátort.
CA2227: A gyűjtemény tulajdonságainak csak olvashatónak kell lenniük A írható gyűjteménytulajdonságokkal a felhasználó lecserélheti a gyűjteményt egy másik gyűjteményre. Egy írásvédett tulajdonság megakadályozza a gyűjtemény cseréjét, de továbbra is lehetővé teszi az egyes tagok beállítását.
CA2229: Szerializálási konstruktorok implementálása A szabály megsértésének kijavításához implementálja a szerializálási konstruktort. Zárt osztály esetén tegye magánjellegűvé a konstruktort; ellenkező esetben tegye védetté.
CA2231: A túlterhelési operátor egyenlő a ValueType.Equals felülbírálásával Az értéktípus felülbírálja az Object.Equals értéket, de nem implementálja az egyenlőség operátort.
CA2234: System.Uri-objektumok átadása sztringek helyett A metódus olyan metódust hív meg, amelynek sztringparamétere "uri", "URI", "urn", "URN", "url" vagy "URL" értéket tartalmaz. A metódus deklarálási típusa egy system.Uri paraméterrel rendelkező metódust tartalmaz.
CA2235: Az összes nem szerializálható mező megjelölése A nem szerializálható típusú példánymezők szerializálható típusban deklarálhatók.
CA2237: ISerializable-típusok megjelölése a SerializableAttribute használatával Ahhoz, hogy a közös nyelvi futtatókörnyezet szerializálhatóként felismerje, a típusokat a SerializableAttribute attribútummal kell megjelölni akkor is, ha a típus egyéni szerializálási rutint használ az ISerializable felület implementálásával.
CA2241: Helyes argumentumok megadása a formázási módszerekhez A System.String.Format fájlnak átadott formátumargumentum nem tartalmaz olyan formázási elemet, amely megfelel az egyes objektumargumentumoknak, vagy fordítva.
CA2242: A NaN helyes tesztelése Ez a kifejezés egy értéket tesztel a Single.Nan vagy a Double.Nan értéken. Az érték teszteléséhez használja a Single.IsNan(Single) vagy a Double.IsNan(Double) függvényt.
CA2243: Az attribútumsztring-literáloknak megfelelően kell elemezni Az attribútum sztringkonstans paramétere nem elemzi megfelelően az URL-címet, a GUID-t vagy a verziót.
CA2244: Ne duplikálja az indexelt elemek inicializálását Az objektuminicializáló több indexelt eleminicializálóval rendelkezik, ugyanazzal az állandó indexel. Az utolsó inicializáló ki nem redundáns.
CA2245: Ne rendeljen hozzá tulajdonságot önmagához Egy tulajdonság véletlenül hozzá lett rendelve önmagához.
CA2246: Ne rendeljen hozzá szimbólumot és tagját ugyanabban az utasításban Nem ajánlott egy szimbólumot és annak tagját, azaz egy mezőt vagy tulajdonságot hozzárendelni ugyanabban az utasításban. Nem egyértelmű, hogy a taghozzáférés a szimbólum régi értékét akarta-e használni a hozzárendelés előtt, vagy a hozzárendelés új értékét ebben az utasításban.
CA2247: A TaskCompletionSource konstruktornak átadott argumentumnak TaskCreationOptions enumnak kell lennie a TaskContinuationOptions enum helyett. A TaskCompletionSource olyan konstruktorokkal rendelkezik, amelyek az alapul szolgáló feladatot vezérlő TaskCreationOptions-t, valamint a tevékenységben tárolt objektumállapotú konstruktorokat veszik át. Ha a TaskCreationOptions helyett véletlenül egy TaskContinuationOptions parancsot ad át, a hívás állapotként kezeli a beállításokat.
CA2248: Adja meg a helyes enum argumentumot az Enum.HasFlag függvénynek A metódushívás argumentumaként HasFlag átadott számtípus eltér a hívó szám típusától.
CA2249: Fontolja meg a String.Contains használatát a String.IndexOf helyett string.IndexOf Az alsztring jelenlétének/hiányának ellenőrzéséhez használt eredményre irányuló hívások lecserélhetők a következővelstring.Contains: .
CA2250: Használat ThrowIfCancellationRequested ThrowIfCancellationRequested automatikusan ellenőrzi, hogy a jogkivonat törölve lett-e, és ha van, akkor a rendszer egy adott jogkivonatot OperationCanceledException ad vissza.
CA2251: Használat String.EqualsString.Compare Az eredmény String.Compare nullához való összehasonlítása helyett egyértelműbb és valószínűleg gyorsabb String.Equals is.
CA2252: Az előzetes verziójú funkciók használata Az előzetes verziójú API-k használata előtt jelentkezzen be a funkciók előzetes verziójára.
CA2253: A névvel ellátott helyőrzők nem lehetnek numerikus értékek A naplózási üzenetsablonban szereplő elnevezett helyőrzők nem állhatnak csak numerikus karakterekből.
CA2254: A sablonnak statikus kifejezésnek kell lennie A naplózási üzenet sablonja nem változhat a hívások között.
CA2255: Az ModuleInitializer attribútum nem használható kódtárakban A modulinicializálókat az alkalmazáskód arra használja, hogy az alkalmazás összetevői inicializálva legyenek az alkalmazáskód végrehajtása előtt.
CA2256: A szülőfelületeken deklarált összes tagnak implementációval kell rendelkeznie egy DynamicInterfaceCastableImplementation attribútumú felületen A típust DynamicInterfaceCastableImplementationAttribute megvalósító IDynamicInterfaceCastable típushoz illesztő implementációként hozzárendelt típusok. Ennek eredményeképpen biztosítania kell az örökölt felületeken meghatározott összes tag implementálását, mivel a megvalósító IDynamicInterfaceCastable típus másként nem biztosítja őket.
CA2257: A DynamicInterfaceCastableImplementationAttribute felületen definiált tagoknak "statikusnak" kell lenniük Mivel egy implementálható IDynamicInterfaceCastable típus nem implementál dinamikus felületet a metaadatokban, a példány felületének olyan tagjára irányuló hívások, amelyek nem explicit implementációként vannak definiálva, futásidőben valószínűleg sikertelenek lesznek. Jelöljön meg új felülettagokat static a futásidejű hibák elkerülése érdekében.
CA2258: A Visual Basic "DynamicInterfaceCastableImplementation" felületének biztosítása nem támogatott Funkcionális DynamicInterfaceCastableImplementationAttribute-attribútumú felület biztosításához az Alapértelmezett felülettagok funkció szükséges, amely a Visual Basicben nem támogatott.
CA2259: Győződjön meg arról, hogy ThreadStatic csak statikus mezőkkel van használatban ThreadStaticAttributecsak a (SharedVisual Basic) mezőket érinti static . A példánymezőkre alkalmazva az attribútum nem befolyásolja a viselkedést.
CA2260: Általános matematikai felületek helyes implementálása Az általános matematikai interfészek megkövetelik, hogy maga a származtatott típus legyen használva az ön-ismétlődő típusparaméterhez.
CA2261: Ne használja ConfigureAwaitOptions.SuppressThrowing a következővel: Task<TResult> A ConfigureAwaitOptions.SuppressThrowing beállítást az általános Task<TResult>nem támogatja, mivel ez érvénytelen TResulteredményhez vezethet.
CA2262: Megfelelő beállítás MaxResponseHeadersLength Győződjön meg arról, hogy az MaxResponseHeadersLength érték helyesen van megadva. Ez az érték kilobájtban van megadva.
CA2263: Az általános túlterhelés előnyben részesítve, ha ismert a típus Az általános túlterhelés használata előnyösebb, ha argumentumot System.Type ad át, ha a típus ismert, mivel a hatékonyabb fordítási idő ellenőrzésével elősegítik a tisztább és a típusbiztosabb kódot.
CA2264: Ne adjon át nem null értékű értéket az "ArgumentNullException.ThrowIfNull" értéknek Az 'ArgumentNullException.ThrowIfNull' akkor dob, ha az átadott argumentum értéke "null". Bizonyos szerkezetek, például a nem null értékű szerkezetek, valamint a "nameof()" és az "új" kifejezések soha nem null értékűek, ezért az "ArgumentNullException.ThrowIfNull" soha nem dob.
CA2300: Ne használjon nem biztonságos deszerializáló binárisformattert A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2301: Ne hívja meg a BinaryFormatter.Deserialize parancsot a BinaryFormatter.Binder első beállítása nélkül A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2302: Győződjön meg arról, hogy a BinaryFormatter.Binder be van állítva a BinaryFormatter.Deserialize hívása előtt A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2305: Ne használjon nem biztonságos deszerializáló LosFormatter A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2310: Ne használjon nem biztonságos deszerializáló NetDataContractSerializert A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2311: Ne deszerializáljon a NetDataContractSerializer.Binder első beállítása nélkül A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2312: Győződjön meg arról, hogy a NetDataContractSerializer.Binder be van állítva a deszerializálás előtt A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2315: Ne használjon nem biztonságos deszerializáló ObjectStateFormattert A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2321: Ne deszerializáljon JavaScriptSerializer használatával SimpleTypeResolver használatával A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2322: Győződjön meg arról, hogy a JavaScriptSerializer nincs inicializálva a SimpleTypeResolverrel a deszerializálás előtt A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2326: Ne használjon TypeNameHandling értékeket a None értéken kívül A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2327: Ne használjon nem biztonságos JsonSerializert Gépház A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2328: Győződjön meg arról, hogy a JsonSerializer Gépház biztonságosak A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2329: Ne deszerializálja a JsonSerializert nem biztonságos konfiguráció használatával A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2330: Győződjön meg arról, hogy a JsonSerializer biztonságos konfigurációval rendelkezik a deszerializáláskor A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon.
CA2350: Győződjön meg arról, hogy a DataTable.ReadXml() bemenete megbízható A nem megbízható bemenettel rendelkező adatok deszerializálásakor DataTable a támadó rosszindulatú bemeneteket hozhat létre a szolgáltatásmegtagadásos támadás végrehajtásához. Előfordulhat, hogy ismeretlen távoli kódvégrehajtási biztonsági rések vannak.
CA2351: Győződjön meg arról, hogy a DataSet.ReadXml() bemenete megbízható A nem megbízható bemenettel rendelkező adatok deszerializálásakor DataSet a támadó rosszindulatú bemeneteket hozhat létre a szolgáltatásmegtagadásos támadás végrehajtásához. Előfordulhat, hogy ismeretlen távoli kódvégrehajtási biztonsági rések vannak.
CA2352: A nem biztonságos adathalmaz vagy a szerializálható típusú DataTable sebezhető lehet a távoli kódvégrehajtási támadásokkal szemben A megjelölt SerializableAttribute osztály vagy struktúra egy vagy több DataSet mezőt vagy DataTable tulajdonságot tartalmaz, és nem rendelkezik GeneratedCodeAttribute.
CA2353: Nem biztonságos dataSet vagy DataTable szerializálható típusban Az XML-szerializálási attribútummal vagy adatszerződési attribútummal megjelölt osztály vagy szerkezet tartalmaz egy vagy DataTable több DataSet mezőt vagy tulajdonságot.
CA2354: A nem biztonságos dataSet vagy DataTable deszerializált objektumdiagramon sebezhető lehet a távoli kódvégrehajtási támadásokkal szemben Szerializált deszerializálás System.Runtime.Serialization.IFormatter , és a leadott típus objektumdiagramja tartalmazhat egy DataSet vagy DataTable.
CA2355: Nem biztonságos adathalmaz vagy DataTable deszerializált objektumgráfban Deszerializálás, ha a leadott vagy a megadott típus objektumgráfja tartalmazhat egy DataSet vagy DataTable.
CA2356: Nem biztonságos adathalmaz vagy adattábla a webes deszerializált objektumdiagramon Egy metódus olyan System.Web.Services.WebMethodAttributeSystem.ServiceModel.OperationContractAttribute paraméterrel vagy paraméterrel rendelkezik, amely hivatkozhat egy DataSet vagy DataTable.
CA2361: Győződjön meg arról, hogy a DataSet.ReadXml() tulajdonságot tartalmazó automatikusan létrehozott osztály nem használható nem megbízható adatokkal A nem megbízható bemenettel rendelkező adatok deszerializálásakor DataSet a támadó rosszindulatú bemeneteket hozhat létre a szolgáltatásmegtagadásos támadás végrehajtásához. Előfordulhat, hogy ismeretlen távoli kódvégrehajtási biztonsági rések vannak.
CA2362: A nem biztonságos adathalmaz vagy az automatikusan szerializálható típusú DataTable sebezhető lehet a távoli kódvégrehajtási támadásokkal szemben Ha a nem megbízható bemenetet BinaryFormatter deszerializálja, és a deszerializált objektumdiagram tartalmaz egy DataSet vagy DataTable, a támadó rosszindulatú hasznos adatokat hozhat létre egy távoli kódvégrehajtási támadás végrehajtásához.
CA3001: Az SQL-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemeneti és SQL-parancsokkal dolgozik, ügyeljen az SQL-injektálási támadásokra. Az SQL-injektálási támadások rosszindulatú SQL-parancsokat hajthatnak végre, veszélyeztetve az alkalmazás biztonságát és integritását.
CA3002: Az XSS biztonsági réseinek kódjának áttekintése A webes kérések nem megbízható bemeneteivel való munka során ügyeljen a helyek közötti szkriptelési (XSS-) támadásokra. Az XSS-támadások nem megbízható bemenetet injektálnak a nyers HTML-kimenetbe, így a támadó rosszindulatú szkripteket hajthat végre vagy rosszindulatúan módosíthatja a tartalmat a weblapon.
CA3003: Fájlútvonal-injektálási biztonsági rések kódjának áttekintése A webes kérésekből származó nem megbízható bemenetek használatakor ügyeljen arra, hogy a fájlok elérési útjainak megadásakor felhasználó által vezérelt bemenetet használjon.
CA3004: Az információfeltárás biztonsági réseinek kódjának áttekintése A kivételinformációk közzététele betekintést nyújt a támadóknak az alkalmazás belső elemeibe, ami segíthet a támadóknak a biztonsági rések kihasználásában.
CA3005: LDAP-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, vegye figyelembe az Lightweight Directory Access Protocol (LDAP) injektálási támadásait. A támadók rosszindulatú LDAP-utasításokat futtathatnak az információs könyvtárakon. Különösen sebezhetők azok az alkalmazások, amelyek felhasználói bemenetet használnak dinamikus LDAP-utasítások létrehozásához a címtárszolgáltatások eléréséhez.
CA3006: A folyamatparancs-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen a parancsinjektálási támadásokra. A parancsinjektálási támadások rosszindulatú parancsokat hajthatnak végre a mögöttes operációs rendszeren, ami veszélyezteti a kiszolgáló biztonságát és integritását.
CA3007: Nyílt átirányítási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen a nyílt átirányítási biztonsági résekre. A támadók kihasználhatják a nyílt átirányítási biztonsági rést, hogy a webhelyet használva valódi URL-címet jelentessenek meg, de a gyanútlan látogatót adathalász vagy más rosszindulatú weblapra irányíthatják át.
CA3008: XPath-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen az XPath-injektálási támadásokra. Az XPath-lekérdezések nem megbízható bemenettel történő létrehozása lehetővé teheti, hogy a támadó rosszindulatúan manipulálja a lekérdezést, hogy nem kívánt eredményt adjon vissza, és esetleg közzétehesse a lekérdezett XML tartalmát.
CA3009: Az XML-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen az XML-injektálási támadásokra.
CA3010: XAML-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen az XAML-injektálási támadásokra. Az XAML egy olyan korrektúranyelv, amely közvetlenül az objektumok példányosítását és végrehajtását jelöli. Ez azt jelenti, hogy az XAML-ben létrehozott elemek képesek együttműködni a rendszererőforrásokkal (például a hálózati hozzáféréssel és a fájlrendszer IO-jával).
CA3011: A DLL-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen a nem megbízható kód betöltésére. Ha a webalkalmazás nem megbízható kódot tölt be, a támadók rosszindulatú DLL-eket szúrhatnak be a folyamatba, és rosszindulatú kódot futtathatnak.
CA3012: Regex-injektálási biztonsági rések kódjának áttekintése Ha nem megbízható bemenettel dolgozik, ügyeljen a regex injektálási támadásokra. A támadó regex-injektálással rosszindulatúan módosíthatja a regex-kifejezést, nem várt eredményeket érhet el, vagy hogy a regex túlzott processzorhasználatot használjon, ami szolgáltatásmegtagadási támadást eredményez.
CA3061: Ne adjon hozzá sémát URL-cím alapján Ne használja az Add metódus nem biztonságos túlterhelését, mert veszélyes külső hivatkozásokat okozhat.
CA3075: Nem biztonságos DTD-feldolgozás Ha nem biztonságos DTDProcessing-példányokat használ, vagy külső entitásforrásokra hivatkozik, az elemző elfogadhatja a nem megbízható bemeneteket, és bizalmas információkat közölhet a támadókkal.
CA3076: Nem biztonságos XSLT-szkript végrehajtása Ha nem biztonságosan hajtja végre az Extensible Stylesheet Language Transformations (XSLT) szolgáltatást a .NET-alkalmazásokban, a processzor feloldhatja a nem megbízható URI-hivatkozásokat, amelyek bizalmas információkat tehetnek közzé a támadók számára, ami szolgáltatásmegtagadáshoz és helyek közötti támadásokhoz vezethet.
CA3077: Nem biztonságos feldolgozás az API-tervezésben, az XML-dokumentum és az XML-szövegolvasóban Ha XMLDocumentből és XMLTextReaderből származó API-t tervez, ügyeljen a DtdProcessingre. A nem biztonságos DTDProcessing-példányok használata külső entitásforrásokra való hivatkozáskor vagy feloldásakor, illetve az XML-ben nem biztonságos értékek beállításakor információ felfedéséhez vezethet.
CA3147: Igekezelők megjelölése az ValidateAntiForgeryToken használatával ASP.NET MVC-vezérlő tervezésekor ügyeljen a helyek közötti hamisítási támadásokra. A helyek közötti hamisítási támadások rosszindulatú kéréseket küldhetnek egy hitelesített felhasználótól a ASP.NET MVC-vezérlőnek.
CA5350: Ne használjon gyenge titkosítási algoritmusokat A gyenge titkosítási algoritmusokat és kivonatolási függvényeket ma számos okból használják, de nem használhatók a védett adatok bizalmasságának vagy integritásának garantálására. Ez a szabály akkor aktiválódik, ha tripleDES, SHA1 vagy RIPEMD160 algoritmusokat talál a kódban.
CA5351: Ne használjon hibás titkosítási algoritmusokat A hibás titkosítási algoritmusok nem tekinthetők biztonságosnak, és használatukat erősen el kell kerülni. Ez a szabály akkor aktiválódik, ha megkeresi az MD5 kivonatoló algoritmust, vagy a DES vagy RC2 titkosítási algoritmusokat a kódban.
CA5358: Ne használjon nem biztonságos titkosítási módokat Ne használjon nem biztonságos titkosítási módokat
CA5359: Ne tiltsa le a tanúsítványérvényesítést A tanúsítvány segíthet a kiszolgáló identitásának hitelesítésében. Az ügyfeleknek ellenőriznie kell a kiszolgálótanúsítványt, hogy a kérések a kívánt kiszolgálóra érkezhessenek. Ha a ServerCertificateValidationCallback mindig visszaadja true, minden tanúsítvány megfelel az ellenőrzésnek.
CA5360: Ne nevezz veszélyes módszereket a deszerializálásban A nem biztonságos deszerializálás olyan biztonsági rés, amely akkor fordul elő, ha nem megbízható adatokat használnak egy alkalmazás logikájának visszaélésére, szolgáltatásmegtagadási (DoS-) támadás végrehajtására, vagy akár tetszőleges kód végrehajtására a deszerializáláskor. Gyakran előfordulhat, hogy rosszindulatú felhasználók visszaélnek ezekkel a deszerializálási funkciókkal, ha az alkalmazás az irányításuk alá tartozó nem megbízható adatokat deszerializálja. A deszerializálás folyamatában különösen veszélyes módszereket hívhat meg. A sikeres nem biztonságos deszerializálási támadások lehetővé tehetik, hogy a támadók olyan támadásokat hajtsanak végre, mint a DoS-támadások, a hitelesítési megkerülések és a távoli kódfuttatás.
CA5361: Ne tiltsa le az erős kriptográfiai Schannel használatát true A kimenő Switch.System.Net.DontEnableSchUseStrongCrypto Transport Layer Security (TLS) kapcsolatokban használt titkosítás gyengítése. A gyengébb titkosítás veszélyeztetheti az alkalmazás és a kiszolgáló közötti kommunikáció bizalmasságát, így a támadók könnyebben lehallgathatják a bizalmas adatokat.
CA5362: Lehetséges referenciaciklus deszerializált objektumgráfban Ha nem megbízható adatokat deszerializál, akkor a deszerializált objektumgráfot feldolgozó kódnak végtelen ciklusok nélkül kell kezelnie a referenciaciklusokat. Ez magában foglalja mind a deszerializálási visszahívás részét képező kódot, mind az objektumgráfot a deszerializálás befejezése után feldolgozó kódot. Ellenkező esetben a támadó szolgáltatásmegtagadásos támadást hajthat végre hivatkozási ciklust tartalmazó rosszindulatú adatokkal.
CA5363: Ne tiltsa le a kérések érvényesítését A kérelmek érvényesítése a ASP.NET egyik funkciója, amely megvizsgálja a HTTP-kéréseket, és meghatározza, hogy tartalmaznak-e potenciálisan veszélyes tartalmakat, amelyek injektálási támadásokhoz vezethetnek, beleértve a helyek közötti szkriptelést is.
CA5364: Ne használjon elavult biztonsági protokollokat A Transport Layer Security (TLS) biztosítja a számítógépek közötti kommunikációt, leggyakrabban a Hypertext Transfer Protocol Secure (HTTPS) használatával. A TLS régebbi protokollverziói kevésbé biztonságosak, mint a TLS 1.2 és a TLS 1.3, és nagyobb valószínűséggel vannak új biztonsági rések. A kockázat csökkentése érdekében kerülje a régebbi protokollverziókat.
CA5365: Ne tiltsa le a HTTP-fejlécek ellenőrzését A HTTP-fejléc-ellenőrzés lehetővé teszi a kocsivissza és a válaszfejlécekben található új vonal karakterek (\r és \n) kódolását. Ez a kódolás segíthet elkerülni az olyan injektálási támadásokat, amelyek olyan alkalmazásokat használnak ki, amelyek a fejlécben található nem megbízható adatokat tükrözik.
CA5366: Az XmlReader használata adathalmaz olvasási XML-fájljához DataSet Ha nem megbízható adatokat tartalmazó XML-t olvas, veszélyes külső hivatkozásokat tölthet be, amelyeket biztonságos feloldóval vagy letiltott DTD-feldolgozással kell korlátozniXmlReader.
CA5367: A típusok nem szerializálása mutatómezőkkel Ez a szabály ellenőrzi, hogy van-e szerializálható osztály mutatómezővel vagy tulajdonsággal. A szerializálni nem tudó tagok lehetnek mutatók, például statikus tagok vagy a velük NonSerializedAttributemegjelölt mezők.
CA5368: ViewStateUserKey beállítása lapról származtatott osztályokhoz ViewStateUserKey A tulajdonság beállítása segíthet megelőzni az alkalmazással kapcsolatos támadásokat, ha lehetővé teszi, hogy azonosítót rendeljen az egyes felhasználók nézetállapot-változójához, hogy a támadók ne tudják használni a változót támadás létrehozásához. Ellenkező esetben biztonsági rések lépnek fel a helyek közötti kérelemhamisításhoz.
CA5369: Az XmlReader használata deszerializáláshoz A nem megbízható DTD- és XML-sémák feldolgozása lehetővé teheti a veszélyes külső hivatkozások betöltését, amelyeket korlátozni kell egy Biztonságos feloldóval rendelkező XmlReaderrel, vagy a DTD és az XML beágyazott sémafeldolgozásának letiltásával.
CA5370: Az XmlReader használata az olvasó ellenőrzéséhez A nem megbízható DTD- és XML-sémák feldolgozása veszélyes külső hivatkozások betöltését teheti lehetővé. Ezt a veszélyes betöltést egy biztonságos feloldóval rendelkező XmlReaderrel, vagy a DTD és az XML beágyazott sémafeldolgozás letiltásával korlátozhatja.
CA5371: Az XmlReader használata sémaolvasáshoz A nem megbízható DTD- és XML-sémák feldolgozása veszélyes külső hivatkozások betöltését teheti lehetővé. Ezt korlátozza, ha egy XmlReader biztonságos feloldóval vagy letiltott DTD- és XML-beágyazott sémafeldolgozással rendelkezik.
CA5372: Az XmlReader használata XPathDocumenthez Az XML nem megbízható adatokból való feldolgozása veszélyes külső hivatkozásokat is betölthet, amelyek korlátozhatók egy biztonságos feloldóval rendelkező XmlReaderrel vagy a DTD-feldolgozás letiltásával.
CA5373: Ne használjon elavult kulcs származtatási függvényt Ez a szabály észleli a gyenge kulcs származtatási módszereinek System.Security.Cryptography.PasswordDeriveBytes és Rfc2898DeriveBytes.CryptDeriveKeya . System.Security.Cryptography.PasswordDeriveBytes a PBKDF1 gyenge algoritmust használt.
CA5374: Ne használja az XslTransformot Ez a szabály ellenőrzi, hogy System.Xml.Xsl.XslTransform a kód példányosítva van-e. System.Xml.Xsl.XslTransform elavult, és nem szabad használni.
CA5375: Ne használjon megosztott hozzáférésű fiók aláírását A fiók sasa delegálhatja az olvasási, írási és törlési műveleteket a blobtárolókon, táblákon, üzenetsorokon és fájlmegosztásokon, amelyek nem engedélyezettek a szolgáltatás SAS-jével. Ez azonban nem támogatja a tárolószintű szabályzatokat, és kevésbé rugalmas és szabályozható a megadott engedélyek felett. Ha a rosszindulatú felhasználók megkapják, a tárfiók könnyen megsérül.
CA5376: A SharedAccessProtocol HttpsOnly használata Az SAS olyan bizalmas adatok, amelyek nem szállíthatók egyszerű szövegben HTTP-n.
CA5377: Tárolószintű hozzáférési szabályzat használata A tárolószintű hozzáférési szabályzat bármikor módosítható vagy visszavonható. Nagyobb rugalmasságot és ellenőrzést biztosít a megadott engedélyek felett.
CA5378: A ServicePointManagerSecurityProtocols letiltása true A Windows Communication Framework (WCF) Transport Layer Security (TLS) kapcsolatainak TLS 1.0-s használatára való korlátozásának beállításaSwitch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols. A TLS e verziója elavult lesz.
CA5379: Ne használjon gyenge kulcs származtatási függvény-algoritmust Az Rfc2898DeriveBytes osztály alapértelmezés szerint az SHA1 algoritmust használja. Meg kell adnia azt a kivonatoló algoritmust, amelyet a konstruktor SHA256 bizonyos túlterheléseinél használjon. Vegye figyelembe, hogy HashAlgorithm a tulajdonság csak tartozékokkal get rendelkezik, és nem rendelkezik overridden módosítóval.
CA5380: Ne adjon hozzá tanúsítványokat a legfelső szintű tárolóhoz Ez a szabály észleli azokat a kódot, amelyek tanúsítványt adnak hozzá a megbízható legfelső szintű hitelesítésszolgáltatók tanúsítványtárolójába. Alapértelmezés szerint a megbízható legfelső szintű hitelesítésszolgáltatók tanúsítványtárolója olyan nyilvános hitelesítésszolgáltatókkal van konfigurálva, amelyek megfelelnek a Microsoft főtanúsítvány-program követelményeinek.
CA5381: Győződjön meg arról, hogy a tanúsítványok nincsenek hozzáadva a gyökértárolóhoz Ez a szabály észleli azokat a kódot, amelyek tanúsítványt adhatnak hozzá a megbízható legfelső szintű hitelesítésszolgáltatók tanúsítványtárolójába. Alapértelmezés szerint a megbízható legfelső szintű hitelesítésszolgáltatók tanúsítványtárolója olyan nyilvános hitelesítésszolgáltatókkal van konfigurálva, amelyek megfelelnek a Microsoft főtanúsítvány-program követelményeinek.
CA5382: Biztonságos cookie-k használata a ASP.NET Core-ban A HTTPS-en keresztül elérhető alkalmazásoknak biztonságos cookie-kat kell használniuk, amelyek azt jelzik a böngészőnek, hogy a cookie-t csak a Secure Sockets Layer (SSL) használatával kell továbbítani.
CA5383: Győződjön meg arról, hogy biztonságos cookie-kat használ a ASP.NET Core-ban A HTTPS-en keresztül elérhető alkalmazásoknak biztonságos cookie-kat kell használniuk, amelyek azt jelzik a böngészőnek, hogy a cookie-t csak a Secure Sockets Layer (SSL) használatával kell továbbítani.
CA5384: Ne használjon digitális aláírási algoritmust (DSA) A DSA egy gyenge aszimmetrikus titkosítási algoritmus.
CA5385: A Rivest–Shamir–Adleman (RSA) algoritmus használata megfelelő kulcsmérettel A 2048 bitesnél kisebb RSA-kulcs sebezhetőbb a találgatásos támadásokkal szemben.
CA5386: A SecurityProtocolType érték korlátozásának elkerülése A Transport Layer Security (TLS) biztosítja a számítógépek közötti kommunikációt, leggyakrabban a Hypertext Transfer Protocol Secure (HTTPS) használatával. A TLS 1.0 és a TLS 1.1 protokollverzió elavult, míg a TLS 1.2 és a TLS 1.3 aktuális. A jövőben előfordulhat, hogy a TLS 1.2 és a TLS 1.3 elavult. Annak érdekében, hogy az alkalmazás biztonságos maradjon, kerülje a protokollverzió keménykódolását, és legalább .NET-keretrendszer 4.7.1-es verziót célozz meg.
CA5387: Ne használjon gyenge kulcs származtatási függvényt elégtelen iterációszámmal Ez a szabály ellenőrzi, hogy a titkosítási kulcsot 100 000-nél kisebb iterációs számmal hozták-e létre Rfc2898DeriveBytes . A magasabb iterációs szám segíthet enyhíteni a létrehozott titkosítási kulcsot kitaláló szótári támadásokat.
CA5388: Gondoskodjon a megfelelő iterációszámról gyenge kulcs származtatási függvény használatakor Ez a szabály ellenőrzi, hogy a titkosítási kulcsot 100 000-nél kisebb iterációs számmal hozták-e létre Rfc2898DeriveBytes . A magasabb iterációs szám segíthet enyhíteni a létrehozott titkosítási kulcsot kitaláló szótári támadásokat.
CA5389: Ne adja hozzá az archív elem elérési útját a cél fájlrendszer elérési útjához A fájl elérési útja relatív lehet, és a fájlrendszer a várt célelérési útvonalon kívülre is elérheti a fájlrendszert, ami kártékony konfigurációs módosításokhoz és távoli kódvégrehajtáshoz vezethet a lay-and-wait technikával.
CA5390: Ne használj kemény kódú titkosítási kulcsot Ahhoz, hogy egy szimmetrikus algoritmus sikeres legyen, a titkos kulcsot csak a feladónak és a fogadónak kell ismernie. Ha egy kulcs nehezen kódolt, könnyen felderíthető. Még a lefordított bináris fájlok esetén is könnyen kinyerhetik a kártékony felhasználók. A titkos kulcs feltörése után a titkosító szöveg közvetlenül visszafejthető, és többé nem védett.
CA5391: Antiforgery tokenek használata ASP.NET Core MVC-vezérlőkben Az POSTantiforgery jogkivonat érvényesítése nélküli , PUT, vagy PATCHDELETE kérések kezelése sebezhető lehet a helyek közötti kérelmek hamisítási támadásai ellen. A helyek közötti hamisítási támadások rosszindulatú kéréseket küldhetnek egy hitelesített felhasználótól a ASP.NET Core MVC-vezérlőnek.
CA5392: A DefaultDllImportSearchPaths attribútum használata P/Invokes esetén Alapértelmezés szerint a P/Invoke függvények több könyvtár mintavételét használják DllImportAttribute , beleértve a betöltendő tár aktuális munkakönyvtárát is. Ez biztonsági probléma lehet bizonyos alkalmazások esetében, ami DLL-eltérítéshez vezethet.
CA5393: Ne használjon nem biztonságos DllImportSearchPath értéket Rosszindulatú DLL lehet az alapértelmezett DLL keresési könyvtárakban és szerelvénykönyvtárakban. Vagy attól függően, hogy honnan futtatja az alkalmazást, az alkalmazás címtárában rosszindulatú DLL is lehet.
CA5394: Ne használjon nem biztonságos véletlenszerűséget A kriptográfiailag gyenge pszeudo-véletlenszerű számgenerátor használatával a támadó előre jelezheti, hogy milyen biztonsági szempontból érzékeny érték jön létre.
CA5395: Miss HttpVerb attribútum a műveleti módszerekhez Az adatokat létrehozó, szerkesztendő, törölhető vagy egyéb módon módosító összes műveletmetelyt az antiforgery attribútummal kell védeni a helyek közötti kérelemhamisítási támadásoktól. A GET művelet végrehajtásának olyan biztonságos műveletnek kell lennie, amelynek nincsenek mellékhatásai, és nem módosítja a tárolt adatokat.
CA5396: HttpOnly beállítása true for HttpCookie Mélységi védelmi intézkedésként győződjön meg arról, hogy a biztonsági szempontból érzékeny HTTP-cookie-k HttpOnlyként vannak megjelölve. Ez azt jelzi, hogy a webböngészőknek le kell tiltania a szkriptek hozzáférését a cookie-khoz. Az injektált rosszindulatú szkriptek gyakran ellopják a cookie-kat.
CA5397: Ne használjon elavult SslProtocols-értékeket A Transport Layer Security (TLS) biztosítja a számítógépek közötti kommunikációt, leggyakrabban a Hypertext Transfer Protocol Secure (HTTPS) használatával. A TLS régebbi protokollverziói kevésbé biztonságosak, mint a TLS 1.2 és a TLS 1.3, és nagyobb valószínűséggel vannak új biztonsági rések. A kockázat csökkentése érdekében kerülje a régebbi protokollverziókat.
CA5398: A merevlemezes SslProtocols értékek elkerülése A Transport Layer Security (TLS) biztosítja a számítógépek közötti kommunikációt, leggyakrabban a Hypertext Transfer Protocol Secure (HTTPS) használatával. A TLS 1.0 és a TLS 1.1 protokollverzió elavult, míg a TLS 1.2 és a TLS 1.3 aktuális. A jövőben előfordulhat, hogy a TLS 1.2 és a TLS 1.3 elavult. Annak érdekében, hogy az alkalmazás biztonságos maradjon, kerülje a protokollverziók keménykódolását.
CA5399: Határozottan tiltsa le a HttpClient-tanúsítványok visszavonási listájának ellenőrzését A visszavont tanúsítványok már nem megbízhatók. Ezt használhatják a támadók, akik rosszindulatú adatokat adnak át, vagy ellopják a bizalmas adatokat a HTTPS-kommunikációban.
CA5400: Győződjön meg arról, hogy a HttpClient-tanúsítványok visszavonási listájának ellenőrzése nincs letiltva A visszavont tanúsítványok már nem megbízhatók. Ezt használhatják a támadók, akik rosszindulatú adatokat adnak át, vagy ellopják a bizalmas adatokat a HTTPS-kommunikációban.
CA5401: Ne használja a CreateEncryptort nem alapértelmezett IV-es verzióval A szimmetrikus titkosításnak mindig nem ismételhető inicializálási vektort kell használnia a szótártámadások megelőzése érdekében.
CA5402: A CreateEncryptor használata az alapértelmezett IV-vel A szimmetrikus titkosításnak mindig nem ismételhető inicializálási vektort kell használnia a szótártámadások megelőzése érdekében.
CA5403: Ne használj kemény kódú tanúsítványt Egy data vagy X509Certificate2 több konstruktor vagy rawData konstruktor paramétere X509Certificate szigorúan kódolt.
CA5404: Ne tiltsa le a jogkivonat-érvényesítési ellenőrzéseket TokenValidationParameters a jogkivonat érvényesítését vezérlő tulajdonságok nem állíthatók be a következőre false: .
CA5405: Ne hagyja ki mindig a tokenérvényesítést a meghatalmazottakban A visszahíváshoz rendelt AudienceValidator vagy LifetimeValidator mindig visszaadott truevisszahívás.
IL3000: A szerelvényfájl elérési útjának elkerülése egyetlen fájlként való közzétételkor Egyetlen fájlként való közzétételkor ne férhessen hozzá a szerelvényfájl elérési útjának eléréséhez.
IL3001: A szerelvényfájl elérési útjának elkerülése egyetlen fájlként való közzétételkor Egyetlen fájlként való közzétételkor ne férhessen hozzá a szerelvényfájl elérési útjának eléréséhez.
IL3002: Ne hívja meg a "RequiresAssemblyFilesAttribute" felirattal ellátott tagokat egyetlen fájlként való közzétételkor Ne hívja meg a "RequiresAssemblyFilesAttribute" felirattal ellátott tagokat egyetlen fájlként való közzétételkor
IL3003: A "RequiresAssemblyFilesAttribute" megjegyzésnek meg kell egyeznie az összes felületi implementációval vagy felülbírálással. A "RequiresAssemblyFilesAttribute" megjegyzésnek meg kell egyeznie az összes felületi implementációban vagy felülbírálásban.

Jelmagyarázat

Az alábbi táblázat a referenciadokumentációban szereplő egyes szabályokhoz megadott információk típusát mutatja be.

Elem Leírás
Típus A szabály TypeName tulajdonsága.
Szabályazonosító A szabály egyedi azonosítója. A szabályazonosító és a kategória a figyelmeztetés forráson belüli letiltására szolgál.
Kategória A szabály kategóriája, például a biztonság.
A javítás kompatibilitástörő vagy nem törik Azt jelzi, hogy a szabály megsértésének kijavítása kompatibilitástörő változás-e. A kompatibilitástörő változás azt jelenti, hogy a szabálysértést okozó céltól függőséggel rendelkező szerelvény nem fog újrafordítást végrehajtani az új rögzített verzióval, vagy futásidőben meghiúsulhat a módosítás miatt. Ha több javítás is elérhető, és legalább egy javítás kompatibilitástörő változás, és egy javítás nem, akkor a "Törés" és a "Nem törés" is meg van adva.
Ok Az adott felügyelt kód, amely miatt a szabály figyelmeztetést generál.
Leírás Ismerteti a figyelmeztetés mögötti problémákat.
Szabálysértések kijavítása Ebből a cikkből megtudhatja, hogyan módosíthatja a forráskódot úgy, hogy megfeleljen a szabálynak, és hogyan akadályozhatja meg, hogy figyelmeztetést generáljon.
Mikor kell letiltani a figyelmeztetéseket? Azt ismerteti, hogy mikor lehet biztonságosan letiltani a szabály figyelmeztetését.
Mintakód A szabályt megsértő és a szabálynak megfelelő példák kijavítása.
Kapcsolódó szabályok Kapcsolódó szabályok.