Megbízhatósági szabályok

A megbízhatósági szabályok támogatják a kódtár és az alkalmazások megbízhatóságát, például a megfelelő memória- és szálhasználatot. A megbízhatósági szabályok a következők:

Szabály Leírás
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
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 az ismert befejezés előtt 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.