Delen via


Betrouwbaarheidsregels

Betrouwbaarheidsregels ondersteunen bibliotheek- en toepassingsbetrouwbaarheid, zoals het juiste geheugen- en threadgebruik. De betrouwbaarheidsregels zijn onder andere:

Regel Beschrijving
CA2000: Objecten verwijderen voordat het bereik verloren gaat Omdat een uitzonderlijke gebeurtenis kan optreden die verhindert dat een object wordt uitgevoerd, moet het object expliciet worden verwijderd voordat alle verwijzingen naar het object buiten het bereik vallen.
CA2002: Objecten met zwakke identiteit niet vergrendelen Een object heeft een zwakke identiteit wanneer het rechtstreeks kan worden geopend binnen de grenzen van het toepassingsdomein. Een thread die probeert een vergrendeling te verkrijgen voor een object met een zwakke identiteit, kan worden geblokkeerd door een tweede thread in een ander toepassingsdomein dat een vergrendeling op hetzelfde object heeft.
CA2007: Wacht niet rechtstreeks op een taak Een asynchrone methode wacht op een Task rechtstreeks.
CA2008: Geen taken maken zonder een TaskScheduler door te geven Een taak maken of vervolgbewerking maakt gebruik van een overbelasting van een methode die geen parameter opgeeft TaskScheduler .
CA2009: Roep ToImmutableCollection niet aan op een immutableCollection-waarde ToImmutable methode werd onnodig aangeroepen op een onveranderbare verzameling uit System.Collections.Immutable naamruimte.
CA2011: Wijs geen eigenschap toe binnen de setter Aan een eigenschap is per ongeluk een waarde toegewezen binnen een eigen set accessor.
CA2012: ValueTasks correct gebruiken ValueTasks die worden geretourneerd door aanroepen van leden, zijn bedoeld om direct te worden gewacht. Pogingen om een ValueTask meerdere keren te gebruiken of om rechtstreeks toegang te krijgen tot het resultaat van een waarde voordat bekend is dat het is voltooid, kan leiden tot een uitzondering of beschadiging. Het negeren van een dergelijke ValueTask is waarschijnlijk een indicatie van een functionele bug en kan de prestaties verminderen.
CA2013: ReferenceEquals niet gebruiken met waardetypen Wanneer u waarden vergelijkt met behulp van System.Object.ReferenceEquals, als objA en objB waardetypen zijn, worden ze in het vak geplaatst voordat ze worden doorgegeven aan de ReferenceEquals methode. Dit betekent dat zelfs als zowel objA als objB hetzelfde exemplaar van een waardetype vertegenwoordigen, de ReferenceEquals methode toch onwaar retourneert.
CA2014: Gebruik stackalloc niet in lussen. Stackruimte toegewezen door een stackalloc wordt alleen aan het einde van de aanroep van de huidige methode vrijgegeven. Het gebruik ervan in een lus kan leiden tot niet-gebonden stackgroei en uiteindelijke stackoverloopvoorwaarden.
CA2015: Definieer geen finalizers voor typen die zijn afgeleid van MemoryManager<T> Als u een finalizer toevoegt aan een type dat is afgeleid van MemoryManager<T> , kan geheugen worden vrijgemaakt terwijl het nog in gebruik is door een Span<T>.
CA2016: de parameter CancellationToken doorsturen naar methoden die één methode gebruiken Stuur de CancellationToken parameter door naar methoden die er één nodig hebben om ervoor te zorgen dat de annuleringsmeldingen van de bewerking correct worden doorgegeven of geef expliciet door CancellationToken.None om aan te geven dat het token opzettelijk niet wordt doorgegeven.
CA2017: Aantal parameters komt niet overeen Het aantal parameters dat is opgegeven in de sjabloon voor logboekregistratieberichten komt niet overeen met het aantal benoemde tijdelijke aanduidingen.
CA2018: Het count argument om Buffer.BlockCopy het aantal te kopiëren bytes op te geven Bij gebruik Buffer.BlockCopygeeft het count argument het aantal te kopiëren bytes op. U moet alleen Array.Length gebruiken voor het count argument voor matrices waarvan de elementen precies één byte groot zijn. byte, sbyteen bool matrices hebben elementen die één byte groot zijn.
CA2019: ThreadStatic velden mogen geen inline initialisatie gebruiken Een veld met ThreadStaticAttribute aantekeningen wordt geïnitialiseerd of expliciet in een static constructor (Shared in Visual Basic).
CA2020: Gedragswijziging voorkomen die wordt veroorzaakt door ingebouwde operators van IntPtr/UIntPtr Sommige ingebouwde operators die zijn toegevoegd in .NET 7 gedragen zich anders dan de door de gebruiker gedefinieerde operators in .NET 6 en eerdere versies. Sommige operators die voorheen in een niet-gecontroleerde context werpen terwijl overlopen, worden niet meer gegenereerd, tenzij ze zijn verpakt in de gecontroleerde context. Sommige operators die eerder niet in de gecontroleerde context waren gegooid, worden nu gegooid, tenzij ze zijn verpakt binnen een niet-gecontroleerde context.
CA2021: Roep Enumerable.Cast<T> of Enumerable.OfType<T> met niet-compatibele typen niet aan Een aanroep naar Enumerable.Cast<TResult>(IEnumerable) of Enumerable.OfType<TResult>(IEnumerable) geeft een typeparameter op die niet compatibel is met het type invoerverzameling.