Kodkvalitetsregler

.NET-kodanalys innehåller regler som syftar till att förbättra kodkvaliteten. Reglerna är indelat i områden som design, globalisering, prestanda och säkerhet. Vissa regler är specifika för .NET API-användning, medan andra handlar om allmän kodkvalitet.

Index över regler

I följande tabell visas kodkvalitetsanalysregler.

Regel-ID och varning beskrivning
CA1000: Deklarera inte statiska medlemmar på generiska typer När en statisk medlem av en allmän typ anropas måste typargumentet anges för typen. När en allmän instansmedlem som inte stöder slutsatsdragning anropas måste typargumentet anges för medlemmen. I dessa två fall är syntaxen för att ange typargumentet annorlunda och lätt förvirrad.
CA1001: Typer som äger disponibla fält ska vara disponibla En klass deklarerar och implementerar ett instansfält som är av typen System.IDisposable och klassen implementerar inte IDisposable. En klass som deklarerar ett IDisposable-fält äger indirekt en ohanterad resurs och bör implementera gränssnittet IDisposable.
CA1002: Exponera inte allmänna listor System.Collections.Generic.List<(Of <(T>)>) är en allmän samling som är utformad för prestanda, inte arv. Därför innehåller List inga virtuella medlemmar. De generiska samlingar som är utformade för arv bör exponeras i stället.
CA1003: Använda allmänna händelsehanterarinstanser En typ innehåller ett ombud som returnerar void, vars signatur innehåller två parametrar (det första ett objekt och den andra en typ som kan tilldelas EventArgs), och den innehållande sammansättningen riktar sig till Microsoft .NET Framework 2.0.
CA1005: Undvik överdrivna parametrar för generiska typer Ju fler typparametrar en allmän typ innehåller, desto svårare är det att veta och komma ihåg vad varje typparameter representerar. Det är vanligtvis uppenbart med en typparameter, som i Lista<T>, och i vissa fall som har två typparametrar, som i Ordlista<TKey, TValue>. Men om det finns fler än två typparametrar blir svårigheten för stor för de flesta användare.
CA1008: Uppräkningar bör ha noll värde Standardvärdet för en onitialiserad uppräkning, precis som andra värdetyper, är noll. En icke-tillskriven uppräkning bör definiera en medlem genom att använda värdet noll så att standardvärdet är ett giltigt värde för uppräkningen. Om en uppräkning med attributet FlagsAttribute definierar en nollvärdesmedlem, bör dess namn vara "Ingen" för att indikera att inga värden har angetts i uppräkningen.
CA1010: Samlingar bör implementera generiskt gränssnitt Om du vill bredda användbarheten för en samling implementerar du ett av de generiska samlingsgränssnitten. Sedan kan samlingen användas för att fylla i generiska samlingstyper.
CA1012: Abstrakta typer bör inte ha offentliga konstruktorer Konstruktorer för abstrakta typer kan bara anropas av härledda typer. Eftersom offentliga konstruktorer skapar instanser av en typ och du inte kan skapa instanser av en abstrakt typ, är en abstrakt typ som har en offentlig konstruktor felaktigt utformad.
CA1014: Markera sammansättningar med CLSCompliantAttribute Common Language Specification (CLS) definierar namngivningsbegränsningar, datatyper och regler som sammansättningar måste överensstämma med om de ska användas mellan olika programmeringsspråk. God design kräver att alla sammansättningar uttryckligen anger CLS-efterlevnad med hjälp CLSCompliantAttribute av . Om det här attributet inte finns i en sammansättning är sammansättningen inte kompatibel.
CA1016: Markera sammansättningar med AssemblyVersionAttribute .NET använder versionsnumret för att unikt identifiera en sammansättning och binda till typer i starkt namngivna sammansättningar. Versionsnumret används tillsammans med versions- och utgivarprincipen. Som standard körs program endast med den sammansättningsversion som de skapades med.
CA1017: Markera sammansättningar med ComVisibleAttribute ComVisibleAttribute avgör hur COM-klienter får åtkomst till hanterad kod. Bra design avgör att sammansättningar uttryckligen anger COM-synlighet. COM-synlighet kan anges för hela sammansättningen och sedan åsidosättas för enskilda typer och typmedlemmar. Om det här attributet inte finns är innehållet i sammansättningen synligt för COM-klienter.
CA1018: Markera attribut med AttributeUsageAttribute När du definierar ett anpassat attribut markerar du det med hjälp av AttributeUsageAttribute för att ange var i källkoden det anpassade attributet kan tillämpas. Innebörden och den avsedda användningen av ett attribut avgör dess giltiga platser i koden.
CA1019: Definiera accessorer för attributargument Attribut kan definiera obligatoriska argument som måste anges när du tillämpar attributet på ett mål. Dessa kallas även för positionsargument eftersom de tillhandahålls till attributkonstruktorer som positionsparametrar. För varje obligatoriskt argument bör attributet också tillhandahålla en motsvarande skrivskyddad egenskap så att argumentets värde kan hämtas vid körningen. Attribut kan också definiera valfria argument, som även kallas namngivna argument. Dessa argument tillhandahålls till attributkonstruktorer efter namn och bör ha en motsvarande läs-/skrivegenskap.
CA1021: Undvik parametrar Att skicka typer efter referens (med out eller ref) kräver erfarenhet av pekare, förståelse för hur värdetyper och referenstyper skiljer sig åt och hanteringsmetoder med flera returvärden. Dessutom är skillnaden mellan ut- och referensparametrar inte allmänt förstådd.
CA1024: Använd egenskaper där det är lämpligt En offentlig eller skyddad metod har ett namn som börjar med "Get", tar inga parametrar och returnerar ett värde som inte är en matris. Metoden kan vara en bra kandidat för att bli en egenskap.
CA1027: Markera uppräkningar med FlagsAttribute En uppräkning är en värdetyp som definierar en uppsättning relaterade namngivna konstanter. Tillämpa FlagsAttribute på en uppräkning när dess namngivna konstanter kan kombineras på ett meningsfullt sätt.
CA1028: Uppräkningslagring ska vara Int32 En uppräkning är en värdetyp som definierar en uppsättning relaterade namngivna konstanter. Som standard används datatypen System.Int32 för att lagra konstantvärdet. Även om du kan ändra den här underliggande typen krävs eller rekommenderas den inte för de flesta scenarier.
CA1030: Använd händelser där det är lämpligt Den här regeln identifierar metoder som har namn som normalt används för händelser. Om en metod anropas som svar på en tydligt definierad tillståndsändring ska metoden anropas av en händelsehanterare. Objekt som anropar metoden bör generera händelser i stället för att anropa metoden direkt.
CA1031: Fånga inte allmänna undantagstyper Allmänna undantag bör inte fångas. Fånga ett mer specifikt undantag eller återväxa det allmänna undantaget som den sista instruktionen i catch-blocket.
CA1032: Implementera standardfelkonstruktorer Om det inte finns någon fullständig uppsättning konstruktorer kan det vara svårt att hantera undantag på rätt sätt.
CA1033: Gränssnittsmetoder bör kunna anropas av underordnade typer En oförseglat externt synlig typ ger en explicit metodimplementering av ett offentligt gränssnitt och tillhandahåller inte en alternativ externt synlig metod som har samma namn.
CA1034: Kapslade typer bör inte vara synliga En kapslad typ är en typ som deklareras i omfånget för en annan typ. Kapslade typer är användbara för att kapsla in information om privat implementering av den innehållande typen. Kapslade typer bör inte vara externt synliga för det här ändamålet.
CA1036: Åsidosätt metoder för jämförbara typer En offentlig eller skyddad typ implementerar gränssnittet System.IComparable. Den åsidosätter inte Object.Equals och överbelastar inte heller den språkspecifika operatorn för likhet, ojämlikhet, mindre än eller större än.
CA1040: Undvik tomma gränssnitt Gränssnitt definierar medlemmar som tillhandahåller ett beteende- eller användningskontrakt. De funktioner som beskrivs av gränssnittet kan användas av vilken typ som helst, oavsett var typen visas i arvshierarkin. En typ implementerar ett gränssnitt genom att tillhandahålla implementeringar för medlemmarna i gränssnittet. Ett tomt gränssnitt definierar inte några medlemmar. Den definierar därför inte ett kontrakt som kan genomföras.
CA1041: Ange föråldradAttribute-meddelande En typ eller medlem markeras med hjälp av ett System.ObsoleteAttribute-attribut som inte har angett egenskapen ObsoleteAttribute.Message. När en typ eller medlem som markeras med hjälp av ObsoleteAttribute kompileras visas egenskapen Meddelande för attributet. Detta ger användaren information om den föråldrade typen eller medlemmen.
CA1043: Använd integral- eller strängargument för indexerare Indexerare (d.v.s. indexerade egenskaper) bör använda integral- eller strängtyper för indexet. Dessa typer används vanligtvis för indexering av datastrukturer och ökar bibliotekets användbarhet. Användningen av objekttypen bör begränsas till de fall där den specifika integralen eller strängtypen inte kan anges vid designtillfället.
CA1044: Egenskaper ska inte bara skrivas Även om det är acceptabelt och ofta nödvändigt att ha en skrivskyddad egenskap, förbjuder designriktlinjerna användning av skrivskyddade egenskaper. Det beror på att det inte ger någon säkerhet att låta en användare ange ett värde och sedan hindra användaren från att visa det värdet. Utan läsåtkomst kan inte heller tillståndet för delade objekt visas, vilket begränsar deras användbarhet.
CA1045: Skicka inte typer efter referens Att skicka typer efter referens (med out eller ref) kräver erfarenhet av pekare, förståelse för hur värdetyper och referenstyper skiljer sig åt och hanteringsmetoder som har flera returvärden. Biblioteksarkitekter som utformar för en allmän målgrupp bör inte förvänta sig att användarna ska bli skickliga på att arbeta med out eller ref parametrar.
CA1046: Överlagrar inte operatorn är lika med referenstyper För referenstyper är standardimplementeringen av likhetsoperatorn nästan alltid korrekt. Som standard är två referenser bara lika med om de pekar på samma objekt.
CA1047: Deklarera inte skyddade medlemmar i förseglade typer Typer deklarerar skyddade medlemmar så att ärvande typer kan komma åt eller åsidosätta medlemmen. Per definition kan inte förseglade typer ärvas, vilket innebär att skyddade metoder på förseglade typer inte kan anropas.
CA1050: Deklarera typer i namnområden Typer deklareras i namnområden för att förhindra namnkollisioner och som ett sätt att organisera relaterade typer i en objekthierarki.
CA1051: Deklarera inte synliga instansfält Den primära användningen av ett fält bör vara som en implementeringsinformation. Fälten ska vara privata eller interna och ska exponeras med hjälp av egenskaper.
CA1052: Statiska hållare ska förseglas En offentlig eller skyddad typ innehåller endast statiska medlemmar och deklareras inte med hjälp av den förseglade (C#-referensen) (NotInheritable) modifieraren. En typ som inte är avsedd att ärvas ska markeras med hjälp av den förseglade modifieraren för att förhindra att den används som bastyp.
CA1053: Statiska hållare ska inte ha konstruktorer En offentlig eller kapslad offentlig typ deklarerar endast statiska medlemmar och har en offentlig eller skyddad standardkonstruktor. Konstruktorn är onödig eftersom det inte krävs någon instans av typen för att anropa statiska medlemmar. Strängöverlagringen ska anropa URI-överlagringen (uniform resource identifier) med hjälp av strängargumentet för säkerhet och säkerhet.
CA1054: URI-parametrar bör inte vara strängar Om en metod tar en strängrepresentation av en URI bör motsvarande överlagring tillhandahållas som tar en instans av URI-klassen, som tillhandahåller dessa tjänster på ett säkert och säkert sätt.
CA1055: URI-returvärden ska inte vara strängar Den här regeln förutsätter att metoden returnerar en URI. En strängrepresentation av en URI är benägen att parsa och koda fel och kan leda till säkerhetsrisker. Klassen System.Uri tillhandahåller dessa tjänster på ett säkert och säkert sätt.
CA1056: URI-egenskaper ska inte vara strängar Den här regeln förutsätter att egenskapen representerar en URI (Uniform Resource Identifier). En strängrepresentation av en URI är benägen att parsa och koda fel och kan leda till säkerhetsrisker. Klassen System.Uri tillhandahåller dessa tjänster på ett säkert och säkert sätt.
CA1058: Typer bör inte utöka vissa bastyper En externt synlig typ utökar vissa bastyper. Använd något av alternativen.
CA1060: Flytta P/Invokes till klassen NativeMethods Plattformsanropsmetoder, till exempel de som markeras med hjälp av attributet System.Runtime.InteropServices.DllImportAttribute eller metoder som definieras med hjälp av nyckelordet Declare i Visual Basic, får åtkomst till ohanterad kod. Dessa metoder bör vara av klassen NativeMethods, Valv NativeMethods eller UnsafeNativeMethods.
CA1061: Dölj inte basklassmetoder En metod i en bastyp döljs av en identiskt namngiven metod i en härledd typ, när parametersignaturen för den härledda metoden endast skiljer sig efter typer som är mer svagt härledda än motsvarande typer i parametersignaturen för basmetoden.
CA1062: Verifiera argument för offentliga metoder Alla referensargument som skickas till externt synliga metoder ska kontrolleras mot null.
CA1063: Implementera IDisposable korrekt Alla IDisposable-typer bör implementera mönstret Ta bort korrekt.
CA1064: Undantag bör vara offentliga Ett internt undantag visas endast inom det egna interna omfånget. När undantaget ligger utanför det interna omfånget kan endast basfelet användas för att fånga undantaget. Om det interna undantaget ärvs från Exception, SystemExceptioneller ApplicationException, har den externa koden inte tillräcklig information för att veta vad du ska göra med undantaget.
CA1065: Skapa inte undantag på oväntade platser En metod som inte förväntas utlösa undantag utlöser ett undantag.
CA1066: Implementera IEquatable vid åsidosättande av lika med En värdetyp åsidosätter Equals metoden, men implementerar IEquatable<T>inte .
CA1067: Åsidosätt lika med när du implementerar IEquatable En typ implementerar , men åsidosätter IEquatable<T>Equals inte metoden.
CA1068: AnnulleringToken-parametrar måste komma sist En metod har parametern CancellationToken som inte är den sista parametern.
CA1069: Uppräkningar bör inte ha duplicerade värden En uppräkning har flera medlemmar som uttryckligen tilldelas samma konstanta värde.
CA1070: Deklarera inte händelsefält som virtuella En fältliknande händelse deklarerades som virtuell.
CA1200: Undvik att använda cref-taggar med ett prefix Cref-attributet i en XML-dokumentationstagg betyder "kodreferens". Den anger att den inre texten i taggen är ett kodelement, till exempel en typ, metod eller egenskap. Undvik att använda cref taggar med prefix eftersom det förhindrar att kompilatorn verifierar referenser. Det förhindrar också att Visual Studio Integrated Development Environment (IDE) hittar och uppdaterar dessa symbolreferenser under refaktoriseringar.
CA1303: Skicka inte literaler som lokaliserade parametrar En externt synlig metod skickar en strängliteral som en parameter till en .NET-konstruktor eller -metod, och den strängen bör vara localizable.
CA1304: Ange CultureInfo En metod eller konstruktor anropar en medlem som har en överlagring som accepterar parametern System.Globalization.CultureInfo, och metoden eller konstruktorn anropar inte överbelastningen som tar parametern CultureInfo. När ett CultureInfo- eller System.IFormatProvider-objekt inte tillhandahålls kanske standardvärdet som tillhandahålls av den överbelastade medlemmen inte har den effekt som du vill ha i alla nationella inställningar.
CA1305: Ange IFormatProvider En metod eller konstruktor anropar en eller flera medlemmar som har överlagringar som accepterar en System.IFormatProvider-parameter, och metoden eller konstruktorn anropar inte överbelastningen som tar parametern IFormatProvider. När ett System.Globalization.CultureInfo- eller IFormatProvider-objekt inte tillhandahålls kanske standardvärdet som tillhandahålls av den överbelastade medlemmen inte har den effekt som du vill ha i alla nationella inställningar.
CA1307: Ange StringComparison för tydlighetens skull En strängjämförelseåtgärd använder en metodöverbelastning som inte anger en StringComparison-parameter.
CA1308: Normalisera strängar till versaler Strängar bör normaliseras till versaler. En liten grupp tecken kan inte göra en tur och retur när de konverteras till gemener.
CA1309: Använd ordningstalssträngKomparison En strängjämförelseåtgärd som inte ärlinguistisk anger inte parametern StringComparison till antingen Ordinal eller OrdinalIgnoreCase. Genom att uttryckligen ange parametern till antingen StringComparison.Ordinal eller StringComparison.OrdinalIgnoreCase, får koden ofta snabbare, blir mer korrekt och blir mer tillförlitlig.
CA1310: Ange StringComparison för korrekthet En strängjämförelseåtgärd använder en metodöverbelastning som inte anger en StringComparison-parameter och använder kulturspecifik strängjämförelse som standard.
CA1311: Ange en kultur eller använd en invariant version Ange en kultur eller använd en invariant kultur för att undvika implicit beroende av den aktuella kulturen när du anropar ToUpper eller ToLower.
CA1401: P/Invokes bör inte visas En offentlig eller skyddad metod i en offentlig typ har attributet System.Runtime.InteropServices.DllImportAttribute (även implementerat av nyckelordet Deklarera i Visual Basic). Sådana metoder bör inte exponeras.
CA1416: Verifiera plattformskompatibilitet Om du använder plattformsberoende API:er på en komponent fungerar koden inte längre på alla plattformar.
CA1417: Använd OutAttribute inte på strängparametrar för P/Invokes Strängparametrar som skickas av värde med OutAttribute kan destabilisera körningen om strängen är en intern sträng.
CA1418: Använd giltig plattformssträng Plattformskompatibilitetsanalys kräver ett giltigt plattformsnamn och en giltig version.
CA1419: Ange en parameterlös konstruktor som är lika synlig som den innehållande typen för betongtyper som härletts från System.Runtime.InteropServices. Valv Handle" Att tillhandahålla en parameterlös konstruktor som är lika synlig som den innehållande typen för en typ som härleds från System.Runtime.InteropServices.SafeHandle ger bättre prestanda och användning med källgenererade interop-lösningar.
CA1420: Egenskap, typ eller attribut kräver runtime-marshalling Om du använder funktioner som kräver runtime-marshalling när runtime-marshalling inaktiveras resulterar det i körningsundatag.
CA1421: Metoden använder runtime-marshalling när DisableRuntimeMarshallingAttribute tillämpas En metod använder runtime-marshalling och runtime-marshalling är uttryckligen inaktiverad.
CA1422: Verifiera plattformskompatibilitet Det rekommenderas inte att anropa ett API som är föråldrat i ett visst operativsystem (version) från en anropsplats som kan nås från operativsystemet (versionen).
CA1501: Undvik överdrivet arv En typ är mer än fyra nivåer djupt i arvshierarkin. Djupt kapslade typhierarkier kan vara svåra att följa, förstå och underhålla.
CA1502: Undvik överdriven komplexitet Den här regeln mäter antalet linjärt oberoende sökvägar genom metoden, vilket bestäms av antalet och komplexiteten hos villkorsgrenar.
CA1505: Undvik ouppnåelig kod En typ eller metod har ett indexvärde med låg underhållbarhet. Ett index för låg underhållsförmåga indikerar att en typ eller metod förmodligen är svår att underhålla och skulle vara en bra kandidat för omdesign.
CA1506: Undvik överdriven klasskoppling Den här regeln mäter klasskoppling genom att räkna antalet unika typreferenser som en typ eller metod innehåller.
CA1507: Använd nameof i stället för sträng En strängliteral används som ett argument där ett nameof uttryck kan användas.
CA1508: Undvik död villkorlig kod En metod har villkorsstyrd kod som alltid utvärderas till true eller false vid körning. Detta leder till död kod i grenen false av villkoret.
CA1509: Ogiltig post i konfigurationsfilen för kodmått Kodmåttregler, till exempel CA1501, CA1502, CA1505 och CA1506, angav en konfigurationsfil med namnet CodeMetricsConfig.txt som har en ogiltig post.
CA1510: Använd ArgumentNullException throw helper Throw-hjälpen är enklare och effektivare än if block som konstruerar en ny undantagsinstans.
CA1511: Använd Hjälp om ArgumentException-kast Throw-hjälpen är enklare och effektivare än if block som konstruerar en ny undantagsinstans.
CA1512: Använd hjälpen för ArgumentOutOfRangeException-kast Throw-hjälpen är enklare och effektivare än if block som konstruerar en ny undantagsinstans.
CA1513: Använd ObjectDisposedException throw helper Throw-hjälpen är enklare och effektivare än if block som konstruerar en ny undantagsinstans.
CA1514: Undvik argument för redundant längd Ett redundant längdargument används vid segmentering i slutet av en sträng eller buffert. En beräknad längd kan vara felbenägen och är också onödig.
CA1515: Överväg att göra offentliga typer interna Till skillnad från ett klassbibliotek refereras normalt inte ett programs API offentligt, så typer kan markeras internt.
CA1700: Namnge inte uppräkningsvärdena "Reserverade" Den här regeln förutsätter att en uppräkningsmedlem som har ett namn som innehåller "reserverad" inte används för närvarande, men är en platshållare som ska byta namn eller tas bort i en framtida version. Att byta namn på eller ta bort en medlem är en icke-bakåtkompatibel ändring.
CA1707: Identifierare bör inte innehålla understreck Enligt konventionen innehåller identifierarnamn inte understrecket (_). Den här regeln kontrollerar namnområden, typer, medlemmar och parametrar.
CA1708: Identifierare bör skilja sig mer än skiftläge Identifierare för namnområden, typer, medlemmar och parametrar kan inte bara skilja sig åt från fall till fall eftersom språk som är avsedda för den vanliga språkkörningen inte behöver vara skiftlägeskänsliga.
CA1710: Identifierare bör ha rätt suffix Enligt konventionen har namnen på typer som utökar vissa bastyper eller som implementerar vissa gränssnitt, eller typer som härleds från dessa typer, ett suffix som är associerat med bastypen eller gränssnittet.
CA1711: Identifierare bör inte ha fel suffix Enligt konventionen ska endast namnen på typer som utökar vissa bastyper eller som implementerar vissa gränssnitt, eller typer som härleds från dessa typer, sluta med specifika reserverade suffix. Andra typnamn bör inte använda dessa reserverade suffix.
CA1712: Ange inte prefixvärden med typnamn Namn på uppräkningsmedlemmar prefixas inte med hjälp av typnamnet eftersom utvecklingsverktyg förväntas tillhandahålla typinformation.
CA1713: Händelser bör inte ha före eller efter prefixet Namnet på en händelse börjar med "Före" eller "Efter". Om du vill namnge relaterade händelser som genereras i en specifik sekvens använder du nutid eller tidigare tempus för att ange den relativa positionen i sekvensen av åtgärder.
CA1714: Flaggor som räknas upp ska ha pluralnamn En offentlig uppräkning har attributet System.FlagsAttribute och namnet slutar inte med "s". Typer som markeras med hjälp av FlagsAttribute har namn som är plural eftersom attributet anger att mer än ett värde kan anges.
CA1715: Identifierare bör ha rätt prefix Namnet på ett externt synligt gränssnitt börjar inte med ett versalt "I". Namnet på en allmän typparameter på en externt synlig typ eller metoden börjar inte med versaler "T".
CA1716: Identifierare ska inte matcha nyckelord Ett namnområdesnamn eller ett typnamn matchar ett reserverat nyckelord i ett programmeringsspråk. Identifierare för namnområden och typer bör inte matcha nyckelord som definieras av språk som är avsedda för den vanliga språkkörningen.
CA1717: Endast FlagsAttribute-uppräkningar ska ha pluralnamn Namngivningskonventioner kräver att ett pluralnamn för en uppräkning anger att mer än ett värde för uppräkningen kan anges samtidigt.
CA1720: Identifierare får inte innehålla typnamn Namnet på en parameter i en externt synlig medlem innehåller ett datatypnamn, eller så innehåller namnet på en externt synlig medlem ett språkspecifikt datatypnamn.
CA1721: Egenskapsnamn ska inte matcha get-metoder Namnet på en offentlig eller skyddad medlem börjar med "Get" och matchar i övrigt namnet på en offentlig eller skyddad egenskap. "Get"-metoder och egenskaper bör ha namn som tydligt särskiljer deras funktion.
CA1724: Typnamn bör inte matcha namnområden Typnamn får inte matcha namnen på .NET-namnområden. Om du bryter mot den här regeln kan du minska bibliotekets användbarhet.
CA1725: Parameternamn ska matcha basdeklarationen Konsekvent namngivning av parametrar i en åsidosättningshierarki ökar användbarheten för metodens åsidosättningar. Ett parameternamn i en härledd metod som skiljer sig från namnet i basdeklarationen kan orsaka förvirring om metoden är en åsidosättning av basmetoden eller en ny överbelastning av metoden.
CA1727: Använd PascalCase för namngivna platshållare Använd PascalCase för namngivna platshållare i mallen för loggningsmeddelande.
CA1801: Granska oanvända parametrar En metodsignatur innehåller en parameter som inte används i metodtexten.
CA1802: Använd literaler där det är lämpligt Ett fält deklareras som statiskt och skrivskyddat (delat och Skrivskyddat i Visual Basic) och initieras med hjälp av ett värde som kan beräknas vid kompileringstillfället. Eftersom värdet som tilldelas till målfältet är beräkningsbart vid kompileringstillfället ändrar du deklarationen till ett const-fält (Const i Visual Basic) så att värdet beräknas vid kompileringstid i stället för vid körning.
CA1805: Initiera inte i onödan .NET-körningen initierar alla fält av referenstyper till standardvärdena innan konstruktorn körs. I de flesta fall är det redundant att uttryckligen initiera ett fält till standardvärdet, vilket ökar underhållskostnaderna och kan försämra prestanda (till exempel med ökad sammansättningsstorlek).
CA1806: Ignorera inte metodresultat Ett nytt objekt skapas men används aldrig. eller en metod som skapar och returnerar en ny sträng anropas och den nya strängen används aldrig. eller en COM- eller P/Invoke-metod returnerar en HRESULT- eller felkod som aldrig används.
CA1810: Initiera statiska fält av referenstyp infogade När en typ deklarerar en explicit statisk konstruktor lägger JIT-kompilatorn (just-in-time) till en kontroll till varje statisk metod och instanskonstruktor av typen för att kontrollera att den statiska konstruktorn tidigare anropades. Statiska konstruktorkontroller kan minska prestandan.
CA1812: Undvik oinstifierade interna klasser En instans av en typ av sammansättningsnivå skapas inte av kod i sammansättningen.
CA1813: Undvik oförseglade attribut .NET tillhandahåller metoder för att hämta anpassade attribut. Som standard söker dessa metoder i arvshierarkin för attribut. Att försegla attributet eliminerar sökningen genom arvshierarkin och kan förbättra prestandan.
CA1814: Föredrar ojämna matriser framför flerdimensionella En ojämn matris är en matris vars element är matriser. Matriserna som utgör elementen kan vara av olika storlekar, vilket leder till mindre bortkastat utrymme för vissa datauppsättningar.
CA1815: Åsidosättning är lika med och operatorn är lika med på värdetyper För värdetyper använder den ärvda implementeringen av Equals biblioteket Reflektion och jämför innehållet i alla fält. Reflektion är beräkningsmässigt dyrt, och det kan vara onödigt att jämföra varje fält för likhet. Om du förväntar dig att användarna ska jämföra eller sortera instanser, eller använda instanser som hashtabellnycklar, bör värdetypen implementera Lika med.
CA1816: Ring GC. SuppressFinalize korrekt En metod som är en implementering av Dispose anropar inte GC. SuppressFinalize; eller en metod som inte är en implementering av Dispose-anrop GC. SuppressFinalize; eller en metod anropar GC. SuppressFinalize och skickar något annat än detta (Jag i Visual Basic).
CA1819: Egenskaper bör inte returnera matriser Matriser som returneras av egenskaper är inte skrivskyddade, även om egenskapen är skrivskyddad. För att hålla matrisen manipulationssäker måste egenskapen returnera en kopia av matrisen. Vanligtvis förstår användarna inte de negativa prestandakonsekvenserna av att anropa en sådan egenskap.
CA1820: Testa för tomma strängar med stränglängd Det går betydligt snabbare att jämföra strängar med egenskapen String.Length eller metoden String.IsNullOrEmpty än att använda Equals.
CA1821: Ta bort tomma finalatorer När du kan kan du undvika finalizers på grund av de ytterligare prestandakostnader som ingår i spårning av objektlivslängd. En tom finalizer medför extra kostnader och ger ingen fördel.
CA1822: Markera medlemmar som statiska Medlemmar som inte har åtkomst till instansdata eller anropar instansmetoder kan markeras som statiska (delade i Visual Basic). När du har markerat metoderna som statiska genererar kompilatorn icke-virtuella anropswebbplatser till dessa medlemmar. Detta kan ge dig en mätbar prestandavinst för prestandakänslig kod.
CA1823: Undvik oanvända privata fält Privata fält har identifierats som inte verkar vara tillgängliga i sammansättningen.
CA1824: Markera sammansättningar med NeutralResourcesLanguageAttribute Attributet NeutralResourcesLanguage informerar resurshanteraren om språket som användes för att visa resurserna i en neutral kultur för en sammansättning. Detta förbättrar uppslagsprestandan för den första resursen som du läser in och kan minska din arbetsuppsättning.
CA1825: Undvik matrisallokeringar med noll längd Initiering av en matris med noll längd leder till onödig minnesallokering. Använd i stället den statiskt allokerade tomma matrisinstansen genom att anropa Array.Empty. Minnesallokeringen delas över alla anrop för den här metoden.
CA1826: Använd egenskapen i stället för Linq Enumerable-metoden Enumerable LINQ-metoden användes på en typ som stöder en motsvarande, effektivare egenskap.
CA1827: Använd inte Count/LongCount när alla kan användas Count eller LongCount -metoden användes där Any metoden skulle vara effektivare.
CA1828: Använd inte CountAsync/LongCountAsync när AnyAsync kan användas CountAsync eller LongCountAsync -metoden användes där AnyAsync metoden skulle vara effektivare.
CA1829: Använd egenskapen Length/Count i stället för metoden Enumerable.Count CountLINQ-metoden användes på en typ som stöder en motsvarande, effektivare eller Count mer effektiv Length egenskap.
CA1830: Föredrar starkt skrivna överlagringar av tilläggs- och infoga-metoden på StringBuilder Append och Insert ger överlagringar för flera typer utöver String. När det är möjligt föredrar du de starkt skrivna överlagringarna framför att använda ToString() och den strängbaserade överbelastningen.
CA1831: Använd AsSpan i stället för Intervallbaserade indexerare för sträng när det är lämpligt När du använder en range-indexer på en sträng och implicit tilldelar värdet till ReadOnlySpan-teckentypen<> används metoden Substring i stället för Slice, vilket ger en kopia av den begärda delen av strängen.
CA1832: Använd AsSpan eller AsMemory i stället för Intervallbaserade indexerare för att hämta ReadOnlySpan- eller ReadOnlyMemory-delen av en matris När du använder en range-indexer på en matris och implicit tilldelar värdet till en ReadOnlySpan<T> eller ReadOnlyMemory<T> -typ, används metoden GetSubArray i stället för Slice, som genererar en kopia av den begärda delen av matrisen.
CA1833: Använd AsSpan eller AsMemory i stället för Intervallbaserade indexerare för att hämta span- eller minnesdelen av en matris När du använder en range-indexer på en matris och implicit tilldelar värdet till en Span<T> eller Memory<T> -typ, används metoden GetSubArray i stället för Slice, som genererar en kopia av den begärda delen av matrisen.
CA1834: Använd StringBuilder.Append(char) för strängar med ett tecken StringBuilder har en Append överlagring som tar ett char som argument. Välj att anropa överbelastningen char av prestandaskäl.
CA1835: Föredrar "Minnesbaserade överlagringar" för "ReadAsync" och "WriteAsync" "Stream" har en "ReadAsync"-överlagring som tar ett "minnesbyte<>" som det första argumentet och en "WriteAsync"-överlagring som tar en "ReadOnlyMemory<Byte>" som det första argumentet. Välj att anropa minnesbaserade överlagringar, som är mer effektiva.
CA1836: Föredra IsEmpty framför Count när det är tillgängligt Föredrar IsEmpty egenskapen som är effektivare än Count, Lengtheller Count<TSource>(IEnumerable<TSource>)LongCount<TSource>(IEnumerable<TSource>) för att avgöra om objektet innehåller eller inte några objekt.
CA1837: Använd Environment.ProcessId i stället för Process.GetCurrentProcess().Id Environment.ProcessId är enklare och snabbare än Process.GetCurrentProcess().Id.
CA1838: Undvik StringBuilder parametrar för P/Invokes Marshalling av "StringBuilder" skapar alltid en intern buffertkopia, vilket resulterar i flera allokeringar för en marshallingåtgärd.
CA1839: Använd Environment.ProcessPath i stället för Process.GetCurrentProcess(). MainModule.FileName Environment.ProcessPath är enklare och snabbare än Process.GetCurrentProcess().MainModule.FileName.
CA1840: Använd Environment.CurrentManagedThreadId i stället för Thread.CurrentThread.ManagedThreadId Environment.CurrentManagedThreadId är mer kompakt och effektiv än Thread.CurrentThread.ManagedThreadId.
CA1841: Föredrar ordlista innehåller metoder Att anropa ContainsKeys samlingen eller Values kan ofta vara dyrare än att anropa ContainsKey eller ContainsValue på själva ordlistan.
CA1842: Använd inte "WhenAll" med en enda uppgift Användning WhenAll med en enskild uppgift kan leda till prestandaförlust. Vänta eller returnera aktiviteten i stället.
CA1843: Använd inte "WaitAll" med en enda uppgift Användning WaitAll med en enskild uppgift kan leda till prestandaförlust. Vänta eller returnera aktiviteten i stället.
CA1844: Ange minnesbaserade åsidosättningar av asynkrona metoder vid underklassning av "Stream" För att förbättra prestandan åsidosätter du de minnesbaserade asynkrona metoderna när du underklassar "Stream". Implementera sedan de matrisbaserade metoderna när det gäller minnesbaserade metoder.
CA1845: Använd span-baserad sträng. Concat' Det är mer effektivt att använda AsSpan och string.Concat, i stället för Substring och en sammanlänkningsoperator.
CA1846: Föredra AsSpan framför Substring AsSpan är effektivare än Substring. Substring utför en O(n) strängkopia, men AsSpan har inte och har en konstant kostnad. AsSpan utför inte heller några heap-allokeringar.
CA1847: Använd teckenliteral för en sökning med ett enda tecken Använd string.Contains(char) i stället string.Contains(string) för när du söker efter ett enda tecken.
CA1848: Använd LoggerMessage-ombuden Använd ombuden för LoggerMessage bättre prestanda.
CA1849: Anropa asynkrona metoder i en asynkron metod I en metod som redan är asynkron bör anrop till andra metoder vara till deras asynkrona versioner, där de finns.
CA1850: Föredrar statisk HashData metod framför ComputeHash Det är mer effektivt att använda den statiska HashData metoden för att skapa och hantera en HashAlgorithm instans för att anropa ComputeHash.
CA1851: Möjliga flera uppräkningar av IEnumerable samlingen Möjliga flera uppräkningar av IEnumerable samlingen. Överväg att använda en implementering som undviker flera uppräkningar.
CA1852: Försegla interna typer En typ som inte är tillgänglig utanför sammansättningen och som inte har några undertyper inom dess innehållande sammansättning är inte förseglad.
CA1853: Onödigt anrop till "Dictionary.ContainsKey(key)" Det finns ingen anledning att skydda Dictionary.Remove(key) med Dictionary.ContainsKey(key). Dictionary<TKey,TValue>.Remove(TKey) kontrollerar redan om nyckeln finns och inte utlöser den om den inte finns.
CA1854: Föredrar metoden "IDictionary.TryGetValue(TKey, out TValue)" Föredra "TryGetValue" framför en ordlisteindexerare som är skyddad av en "ContainsKey"-kontroll. "ContainsKey" och indexeraren letar båda upp nyckeln, så att använda "TryGetValue" undviker den extra sökningen.
CA1855: Använd Span<T>. Clear() i stället för Span<T>. Fill() Det är mer effektivt att anropa Span<T>.Clear() än att anropa Span<T>.Fill(T) för att fylla elementen i intervallet med ett standardvärde.
CA1856: Felaktig användning av attributet ConstantExpected Attributet ConstantExpectedAttribute tillämpas inte korrekt på en parameter.
CA1857: Parametern förväntar sig en konstant för optimala prestanda Ett ogiltigt argument skickas till en parameter som kommenteras med ConstantExpectedAttribute.
CA1858: Använd StartsWith i stället för IndexOf Det är mer effektivt att anropa String.StartsWith än att anropa String.IndexOf för att kontrollera om en sträng börjar med ett angivet prefix.
CA1859: Använd konkreta typer när det är möjligt för bättre prestanda Koden använder gränssnittstyper eller abstrakta typer, vilket leder till onödiga gränssnittsanrop eller virtuella anrop.
CA1860: Undvik att använda tilläggsmetoden "Enumerable.Any()" Det är mer effektivt och tydligare att använda Length, Counteller IsEmpty (om möjligt) än att anropa Enumerable.Any för att avgöra om en samlingstyp har några element.
CA1861: Undvik konstanta matriser som argument Konstanta matriser som skickas som argument återanvänds inte, vilket innebär prestandakostnader. Överväg att extrahera dem till "statiska skrivskyddade" fält för att förbättra prestandan.
CA1862: Använd metoden StringComparison för att utföra skiftlägesokänsliga strängjämförelser När kod anropar ToLower() eller ToUpper() utför en skiftlägesokänslig strängjämförelse utförs en onödig allokering.
CA1863: Använd "CompositeFormat" Om du vill minska formateringskostnaden cachelagrade du och använder en CompositeFormat instans som argument till String.Format eller StringBuilder.AppendFormat.
CA1864: Föredrar metoden "IDictionary.TryAdd(TKey, TValue)" Både Dictionary<TKey,TValue>.ContainsKey(TKey) och Dictionary<TKey,TValue>.Add utför en sökning, som är redundant. Det är mer effektivt att anropa Dictionary<TKey,TValue>.TryAdd, vilket returnerar ett bool som anger om värdet har lagts till eller inte. TryAdd skriver inte över nyckelns värde om nyckeln redan finns.
CA1865-CA1867: Använd teckenöverlagring Teckenöverlagringen är en bättre överlagring för en sträng med ett enda tecken.
CA1868: Onödigt anrop till "Contains" för uppsättningar Både ISet<T>.Add(T) och ICollection<T>.Remove(T) utför ett uppslag, vilket gör det redundant att anropa ICollection<T>.Contains(T) i förväg. Det är mer effektivt att anropa Add(T) eller Remove(T) direkt, vilket returnerar ett booleskt värde som anger om objektet har lagts till eller tagits bort.
CA1869: Cachelagrar och återanvänder "JsonSerializerOptions"-instanser Om du använder en lokal instans av JsonSerializerOptions för serialisering eller deserialisering kan det avsevärt försämra programmets prestanda om koden körs flera gånger, eftersom System.Text.Json internt cachelagrar serialiseringsrelaterade metadata i den angivna instansen.
CA1870: Använd en cachelagrad "SearchValues"-instans Att använda en cachelagrad SearchValues<T> instans är effektivare än att skicka värden direkt till IndexOfAny eller ContainsAny.
CA1871: Skicka inte en nullbar struct till "ArgumentNullException.ThrowIfNull" "ArgumentNullException.ThrowIfNull" accepterar ett objekt, så om du skickar en nullbar struct kan värdet boxas.
CA1872: Föredrar "Convert.ToHexString" och "Convert.ToHexStringLower" framför anropskedjor baserade på "BitConverter.ToString" Använd Convert.ToHexString eller Convert.ToHexStringLower när du kodar byte till en hexadecimal strängrepresentation. Dessa metoder är mer effektiva och allokeringsvänliga än att använda BitConverter.ToString i kombination med String.Replace för att ersätta bindestreck och String.ToLower.
CA2000: Ta bort objekt innan du förlorar omfånget Eftersom en exceptionell händelse kan inträffa som hindrar slutföraren av ett objekt från att köras, bör objektet uttryckligen tas bort innan alla referenser till det ligger utanför omfånget.
CA2002: Lås inte objekt med svag identitet Ett objekt sägs ha en svag identitet när det kan nås direkt över programdomängränser. En tråd som försöker hämta ett lås på ett objekt som har en svag identitet kan blockeras av en andra tråd i en annan programdomän som har ett lås på samma objekt.
CA2007: Vänta inte direkt på en uppgift En asynkron metod väntarTask direkt. När en asynkron metod väntar direkt Task sker fortsättningen i samma tråd som skapade uppgiften. Det här beteendet kan vara kostsamt när det gäller prestanda och kan leda till ett dödläge i användargränssnittstråden. Överväg att ringa Task.ConfigureAwait(Boolean) för att signalera din avsikt för fortsättning.
CA2008: Skapa inte aktiviteter utan att skicka en TaskScheduler En aktivitetsskapande eller fortsättningsåtgärd använder en metodöverbelastning som inte anger någon TaskScheduler parameter.
CA2009: Anropa inte ToImmutableCollection på ett ImmutableCollection-värde ToImmutable -metoden anropades i onödan för en oföränderlig samling från System.Collections.Immutable namnområdet.
CA2011: Tilldela inte egenskapen i dess setter En egenskap tilldelades av misstag ett värde i sin egen uppsättningsåtkomstor.
CA2012: Använd ValueTasks korrekt ValueTasks som returneras från medlemsanrop är avsedda att inväntas direkt. Försök att använda en ValueTask flera gånger eller att direkt komma åt resultatet innan det är känt att det är klart kan leda till ett undantag eller skada. Att ignorera en sådan ValueTask är sannolikt en indikation på en funktionell bugg och kan försämra prestanda.
CA2013: Använd inte ReferenceEquals med värdetyper När du jämför värden med , System.Object.ReferenceEqualsom objA och objB är värdetyper, boxas de innan de skickas till ReferenceEquals metoden. Det innebär att även om både objA och objB representerar samma instans av en värdetyp returnerar ReferenceEquals metoden ändå false.
CA2014: Använd inte stackalloc i loopar. Stackutrymme som allokeras av en stackalloc frigörs endast i slutet av den aktuella metodens anrop. Om du använder den i en loop kan det leda till obundna stacktillväxt och eventuella stacköverflödesvillkor.
CA2015: Definiera inte finalizers för typer som härleds från MemoryManager<T> Om du lägger till en finalizer i en typ som härletts från MemoryManager<T> kan minnet frigöras medan det fortfarande används av en Span<T>.
CA2016: Vidarebefordra parametern CancellationToken till metoder som tar en Vidarebefordra parametern CancellationToken till metoder som tar en för att säkerställa att meddelandena om att åtgärden avbryts sprids korrekt eller skickas CancellationToken.None uttryckligen för att indikera att token avsiktligt inte sprids.
CA2017: Felmatchning av antal parametrar Antalet parametrar som anges i mallen för loggningsmeddelande matchar inte antalet namngivna platshållare.
CA2018: Argumentet count som ska Buffer.BlockCopy anges ska ange hur många byte som ska kopieras När du använder Buffer.BlockCopycount anger argumentet antalet byte som ska kopieras. Du bör bara använda Array.Length för count argumentet på matriser vars element är exakt en byte i storlek. byte, sbyte, och bool matriser har element som är en byte i storlek.
CA2019: ThreadStatic fält bör inte använda infogad initiering Ett fält som kommenteras med ThreadStaticAttribute initieras infogat eller explicit i en static (Shared i Visual Basic) konstruktor.
CA2020: Förhindra beteendeförändring som orsakas av inbyggda operatorer av IntPtr/UIntPtr Vissa inbyggda operatorer som lagts till i .NET 7 fungerar annorlunda än de användardefinierade operatorerna i .NET 6 och tidigare versioner. Vissa operatorer som brukade kasta i omarkerad kontext när de svämmade över genererar inte längre om de inte omsluts i en markerad kontext. Vissa operatorer som tidigare inte kastade i markerad kontext genererar nu såvida de inte omsluts i en omarkerad kontext.
CA2021: Anropa inte Enumerable.Cast<T> eller Enumerable.OfType<T> med inkompatibla typer Ett anrop till Enumerable.Cast<TResult>(IEnumerable) eller Enumerable.OfType<TResult>(IEnumerable) anger en typparameter som inte är kompatibel med typen av indatasamling.
CA2100: Granska SQL-frågor om säkerhetsrisker En metod anger egenskapen System.Data.IDbCommand.CommandText med hjälp av en sträng som har skapats från ett strängargument till metoden. Den här regeln förutsätter att strängargumentet innehåller användarindata. En SQL-kommandosträng som skapas från användarindata är sårbar för SQL-inmatningsattacker.
CA2101: Ange marshalling för P/Invoke-strängargument En plattformsanropsmedlem tillåter delvis betrodda anropare, har en strängparameter och konverterar inte strängen uttryckligen. Detta kan orsaka en potentiell säkerhetsrisk.
CA2109: Granska synliga händelsehanterare En offentlig eller skyddad händelsehanteringsmetod har identifierats. Händelsehanteringsmetoder bör inte exponeras om det inte är absolut nödvändigt.
CA2119: Tätningsmetoder som uppfyller privata gränssnitt En ärverbar offentlig typ ger en övergripande metodimplementering av ett internt gränssnitt (Vän i Visual Basic). Om du vill åtgärda en överträdelse av den här regeln förhindrar du att metoden åsidosättas utanför sammansättningen.
CA2153: Undvik att hantera skadade tillståndsfel Undantag för skadat tillstånd (CSE) indikerar att minnesskada finns i din process. Att fånga dessa i stället för att låta processen krascha kan leda till säkerhetsrisker om en angripare kan placera en exploatering i den skadade minnesregionen.
CA2200: Återväxt för att bevara stackinformation Ett undantag ändras och undantaget anges uttryckligen i instruktionen throw. Om ett undantag ändras genom att ett undantag anges i utkast-instruktionen går listan över metodanrop mellan den ursprungliga metoden som utlöste undantaget och den aktuella metoden förlorad.
CA2201: Skapa inte reserverade undantagstyper Detta gör det ursprungliga felet svårt att identifiera och felsöka.
CA2207: Initiera statiska fält av värdetyp infogade En värdetyp deklarerar en explicit statisk konstruktor. Åtgärda ett brott mot den här regeln genom att initiera alla statiska data när de deklareras och ta bort den statiska konstruktorn.
CA2208: Instansiera argumentfel korrekt Ett anrop görs till standardkonstruktorn (parameterlös) av en undantagstyp som är eller härleds från ArgumentException, eller så skickas ett felaktigt strängargument till en parameteriserad konstruktor av en undantagstyp som är eller härleds från ArgumentException.
CA2211: Icke-konstanta fält ska inte vara synliga Statiska fält som varken är konstanter eller skrivskyddade är inte trådsäkra. Åtkomsten till ett sådant fält måste kontrolleras noggrant och kräver avancerade programmeringstekniker för att synkronisera åtkomsten till klassobjektet.
CA2213: Disponibla fält ska kasseras En typ som implementerar System.IDisposable deklarerar fält som är av typer som också implementerar IDisposable. Metoden Dispose för fältet anropas inte av metoden Dispose för deklareringstypen.
CA2214: Anropa inte tvingande metoder i konstruktorer När en konstruktor anropar en virtuell metod kanske konstruktorn för den instans som anropar metoden inte har körts.
CA2215: Kassera metoder ska anropa basklassens bortskaffning Om en typ ärver från en engångstyp måste den anropa metoden Dispose för bastypen från sin egen Dispose-metod.
CA2216: Engångstyper bör deklarera finalator En typ som implementerar System.IDisposable och har fält som tyder på att användningen av ohanterade resurser inte implementerar en slutförare, enligt beskrivningen i Object.Finalize.
CA2217: Markera inte uppräkningar med FlagsAttribute En externt synlig uppräkning markeras med hjälp av FlagsAttribute och har ett eller flera värden som inte har två eller en kombination av de andra definierade värdena i uppräkningen.
CA2218: Åsidosätt GetHashCode vid åsidosättande av lika med En offentlig typ åsidosätter men åsidosätter System.Object.EqualsSystem.Object.GetHashCodeinte .
CA2219: Skapa inte undantag i undantagssatser När ett undantag utlöses i en slutgiltigt- eller fel-sats döljer det nya undantaget det aktiva undantaget. När ett undantag utlöses i en filtersats fångar körningen tyst undantaget. Detta gör det ursprungliga felet svårt att identifiera och felsöka.
CA2224: Åsidosättning är lika med överlagringsoperatorn lika med En offentlig typ implementerar likhetsoperatorn men åsidosätter System.Object.Equalsinte .
CA2225: Operatoröverlagringar har namngett alternativ En överlagring av operatorn upptäcktes och den förväntade namngivna alternativa metoden hittades inte. Den namngivna alternativa medlemmen ger åtkomst till samma funktioner som operatorn och tillhandahålls för utvecklare som programmerar på språk som inte stöder överbelastade operatorer.
CA2226: Operatorer bör ha symmetriska överlagringar En typ implementerar likhets- eller ojämlikhetsoperatorn och implementerar inte den motsatta operatorn.
CA2227: Samlingsegenskaper ska vara skrivskyddade Med en skrivbar samlingsegenskap kan en användare ersätta samlingen med en annan samling. En skrivskyddad egenskap hindrar samlingen från att ersättas, men tillåter fortfarande att enskilda medlemmar anges.
CA2229: Implementera serialiseringskonstruktorer Om du vill åtgärda ett brott mot den här regeln implementerar du serialiseringskonstruktorn. För en förseglad klass gör du konstruktorn privat; annars gör du det skyddat.
CA2231: Överlagringsoperatorn är lika med vid åsidosättande av ValueType.Equals En värdetyp åsidosätter Object.Equals men implementerar inte likhetsoperatorn.
CA2234: Skicka System.Uri-objekt i stället för strängar Ett anrop görs till en metod som har en strängparameter vars namn innehåller "uri", "URI", "urn", "URN", "url" eller "URL". Metodens deklarerande typ innehåller en motsvarande metodöverbelastning som har en System.Uri-parameter.
CA2235: Markera alla fält som inte kan serialiseras Ett instansfält av en typ som inte är serialiserbar deklareras i en typ som är serialiserbar.
CA2237: Markera ISerializable-typer med SerializableAttribute För att kunna identifieras av den vanliga språkkörningen som serialiserbar måste typer markeras med attributet SerializableAttribute även när typen använder en anpassad serialiseringsrutin genom implementering av gränssnittet ISerializable.
CA2241: Ange rätt argument för formateringsmetoder Formatargumentet som skickas till System.String.Format innehåller inte ett formatobjekt som motsvarar varje objektargument eller vice versa.
CA2242: Testa för NaN korrekt Det här uttrycket testar ett värde mot Single.Nan eller Double.Nan. Använd Single.IsNan(Single) eller Double.IsNan(Double) för att testa värdet.
CA2243: Attributsträngliteraler ska parsas korrekt Strängliteralparametern för ett attribut parsas inte korrekt för en URL, ett GUID eller en version.
CA2244: Duplicera inte indexerade elementinitieringar En objektinitierare har mer än en indexerad elementinitierare med samma konstanta index. Alla utom den sista initieraren är redundanta.
CA2245: Tilldela inte en egenskap till sig själv En egenskap tilldelades av misstag till sig själv.
CA2246: Tilldela inte en symbol och dess medlem i samma instruktion Att tilldela en symbol och dess medlem, dvs. ett fält eller en egenskap, i samma instruktion rekommenderas inte. Det är oklart om medlemsåtkomsten var avsedd att använda symbolens gamla värde före tilldelningen eller det nya värdet från tilldelningen i den här instruktionen.
CA2247: Argumentet som skickas till TaskCompletionSource-konstruktorn ska vara TaskCreationOptions-uppräkning i stället för TaskContinuationOptions-uppräkning. TaskCompletionSource har konstruktorer som tar TaskCreationOptions som styr den underliggande aktiviteten och konstruktorer som tar objekttillstånd som lagras i aktiviteten. Om du av misstag skickar en TaskContinuationOptions i stället för en UppgiftSkapningSalternativ kommer anropet att behandla alternativen som tillstånd.
CA2248: Ange rätt uppräkningsargument till Enum.HasFlag Uppräkningstypen som skickas som ett argument till metodanropet HasFlag skiljer sig från den anropande uppräkningstypen.
CA2249: Överväg att använda String.Contains i stället för String.IndexOf Anrop till string.IndexOf där resultatet används för att söka efter förekomsten/frånvaron av en delsträng kan ersättas med string.Contains.
CA2250: Använd ThrowIfCancellationRequested ThrowIfCancellationRequested kontrollerar automatiskt om token har avbrutits och genererar en OperationCanceledException om den har gjort det.
CA2251: Använd String.Equals över String.Compare Det är både tydligare och sannolikt snabbare att använda String.Equals i stället för att jämföra resultatet med String.Compare noll.
CA2252: Välj att förhandsgranska funktioner Välj att förhandsgranska funktioner innan du använder förhandsversions-API:er.
CA2253: Namngivna platshållare ska inte vara numeriska värden Namngivna platshållare i mallen för loggningsmeddelande bör inte bestå av endast numeriska tecken.
CA2254: Mallen ska vara ett statiskt uttryck Mallen för loggningsmeddelanden bör inte variera mellan anrop.
CA2255: Attributet ModuleInitializer ska inte användas i bibliotek Modulinitierare är avsedda att användas av programkod för att säkerställa att ett programs komponenter initieras innan programkoden börjar köras.
CA2256: Alla medlemmar som deklareras i överordnade gränssnitt måste ha en implementering i ett DynamicInterfaceCastableImplementation-attributgränssnitt Typer som tillskrivs DynamicInterfaceCastableImplementationAttribute fungerar som en gränssnittsimplementering för en typ som implementerar IDynamicInterfaceCastable typen. Därför måste den tillhandahålla en implementering av alla medlemmar som definierats i de ärvda gränssnitten, eftersom den typ som implementeras IDynamicInterfaceCastable inte ger dem något annat.
CA2257: Medlemmar som definierats i ett gränssnitt med "DynamicInterfaceCastableImplementationAttribute" ska vara "statiska" Eftersom en typ som implementerar kanske inte implementerar IDynamicInterfaceCastable ett dynamiskt gränssnitt i metadata, kommer anrop till en instansgränssnittsmedlem som inte är en explicit implementering som definierats för den här typen sannolikt att misslyckas vid körning. Markera nya gränssnittsmedlemmar static för att undvika körningsfel.
CA2258: Det går inte att tillhandahålla gränssnittet "DynamicInterfaceCastableImplementation" i Visual Basic För att tillhandahålla ett funktionellt DynamicInterfaceCastableImplementationAttribute-tillskrivet gränssnitt krävs funktionen Standardgränssnittsmedlemmar, som inte stöds i Visual Basic.
CA2259: Se till att ThreadStatic endast används med statiska fält ThreadStaticAttribute påverkar static endast fälten (Shared i Visual Basic). När det tillämpas på instansfält har attributet ingen inverkan på beteendet.
CA2260: Implementera allmänna matematiska gränssnitt korrekt Allmänna matematiska gränssnitt kräver att själva den härledda typen används för parametern själv återkommande typ.
CA2261: Använd ConfigureAwaitOptions.SuppressThrowing inte med Task<TResult> Alternativet ConfigureAwaitOptions.SuppressThrowing stöds inte av den generiska Task<TResult>, eftersom det kan leda till att ett ogiltigt TResultreturneras.
CA2262: Ange MaxResponseHeadersLength korrekt Kontrollera att värdet MaxResponseHeadersLength har angetts korrekt. Det här värdet mäts i kilobyte.
CA2263: Föredrar allmän överlagring när typen är känd Att använda en allmän överlagring är att föredra framför att skicka ett System.Type argument när typen är känd, eftersom de främjar renare och mer typsäker kod med förbättrade kompileringstidskontroller.
CA2264: Skicka inte ett icke-nullbart värde till "ArgumentNullException.ThrowIfNull" "ArgumentNullException.ThrowIfNull" genererar när det skickade argumentet är "null". Vissa konstruktioner som icke-nullable structs och "nameof()" och "new" uttryck är kända för att aldrig vara null, så "ArgumentNullException.ThrowIfNull" kommer aldrig att kasta.
CA2300: Använd inte osäker deserializer BinaryFormatter Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2301: Anropa inte BinaryFormatter.Deserialize utan att först ange BinaryFormatter.Binder Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2302: Kontrollera att BinaryFormatter.Binder har angetts innan du anropar BinaryFormatter.Deserialize Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2305: Använd inte osäker deserializer LosFormatter Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2310: Använd inte osäker deserializer NetDataContractSerializer Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2311: Deserialisera inte utan att först ange NetDataContractSerializer.Binder Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2312: Kontrollera att NetDataContractSerializer.Binder har angetts innan deserialisering Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2315: Använd inte osäker deserializer ObjectStateFormatter Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2321: Deserialisera inte med JavaScriptSerializer med hjälp av en SimpleTypeResolver Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2322: Kontrollera att JavaScriptSerializer inte initieras med SimpleTypeResolver innan deserialisering Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2326: Använd inte andra TypeNameHandling-värden än Ingen Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2327: Använd inte osäker JsonSerializer Inställningar Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2328: Kontrollera att JsonSerializer Inställningar är säkra Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2329: Deserialisera inte med JsonSerializer med en osäker konfiguration Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2330: Kontrollera att JsonSerializer har en säker konfiguration vid deserialisering Osäkra deserialiserare är sårbara när deserialisera ej betrodda data. En angripare kan ändra serialiserade data så att de innehåller oväntade typer för att mata in objekt med skadliga biverkningar.
CA2350: Se till att DataTable.ReadXml()-indata är betrodda När en angripare deserialiserar en DataTable med ej betrodda indata kan den skapa skadliga indata för att utföra en överbelastningsattack. Det kan finnas okända sårbarheter för fjärrkörning av kod.
CA2351: Se till att DataSet.ReadXml()-indata är betrodda När en angripare deserialiserar en DataSet med ej betrodda indata kan den skapa skadliga indata för att utföra en överbelastningsattack. Det kan finnas okända sårbarheter för fjärrkörning av kod.
CA2352: Osäkra datauppsättningar eller datatabeller i serialiserbar typ kan vara sårbara för fjärranslutna kodkörningsattacker En klass eller struct markerad med SerializableAttribute innehåller ett fält eller DataTable en DataSet egenskap och har GeneratedCodeAttributeingen .
CA2353: Osäker datauppsättning eller DataTable i serialiserbar typ En klass eller struct markerad med ett XML-serialiseringsattribut eller ett datakontraktsattribut innehåller ett fält eller DataTable en DataSet egenskap.
CA2354: Osäkra datauppsättningar eller datatabeller i deserialiserat objektdiagram kan vara sårbara för fjärrkörning av kod Deserialisera med en System.Runtime.Serialization.IFormatter serialiserad och objektdiagrammet för den gjutna typen kan innehålla en DataSet eller DataTable.
CA2355: Osäker datauppsättning eller datatabell i deserialiserat objektdiagram Deserialisering när den gjutna eller angivna typens objektdiagram kan innehålla en DataSet eller DataTable.
CA2356: Osäker datauppsättning eller datatabell i webbdeserialiserat objektdiagram En metod med en System.Web.Services.WebMethodAttribute eller System.ServiceModel.OperationContractAttribute har en parameter som kan referera till en DataSet eller DataTable.
CA2361: Se till att den automatiskt genererade klassen som innehåller DataSet.ReadXml() inte används med ej betrodda data När en angripare deserialiserar en DataSet med ej betrodda indata kan den skapa skadliga indata för att utföra en överbelastningsattack. Det kan finnas okända sårbarheter för fjärrkörning av kod.
CA2362: Osäkra datauppsättningar eller datatabeller i autogenererad serialiserbar typ kan vara sårbara för fjärranslutna kodkörningsattacker När deserializing untrusted input with BinaryFormatter and the deserialized object graph contains a DataSet eller DataTable, kan en angripare skapa en skadlig nyttolast för att utföra en fjärrkodkörningsattack.
CA3001: Granska koden för sårbarheter vid SQL-inmatning När du arbetar med ej betrodda indata och SQL-kommandon bör du tänka på SQL-inmatningsattacker. En SQL-inmatningsattack kan köra skadliga SQL-kommandon, vilket äventyrar programmets säkerhet och integritet.
CA3002: Granska koden för XSS-sårbarheter När du arbetar med ej betrodda indata från webbbegäranden bör du tänka på XSS-attacker (cross-site scripting). En XSS-attack matar in obetrodda indata i råa HTML-utdata, vilket gör att angriparen kan köra skadliga skript eller ändra innehåll på webbsidan på ett skadligt sätt.
CA3003: Granska koden för sårbarheter för filsökvägsinmatning När du arbetar med ej betrodda indata från webbbegäranden bör du tänka på att använda användarkontrollerade indata när du anger sökvägar till filer.
CA3004: Granska koden för sårbarheter för informationsutlämnande Att avslöja undantagsinformation ger angripare insikt i det interna i ditt program, vilket kan hjälpa angripare att hitta andra sårbarheter att utnyttja.
CA3005: Granska koden för LDAP-inmatningsrisker När du arbetar med ej betrodda indata bör du tänka på LDAP-inmatningsattacker (Lightweight Directory Access Protocol). En angripare kan potentiellt köra skadliga LDAP-instruktioner mot informationskataloger. Program som använder användarindata för att skapa dynamiska LDAP-instruktioner för åtkomst till katalogtjänster är särskilt sårbara.
CA3006: Granska koden för sårbarheter för processkommandoinmatning När du arbetar med ej betrodda indata bör du tänka på kommandoinmatningsattacker. En kommandoinmatningsattack kan köra skadliga kommandon på det underliggande operativsystemet, vilket äventyrar serverns säkerhet och integritet.
CA3007: Granska koden för sårbarheter med öppen omdirigering När du arbetar med ej betrodda indata bör du tänka på sårbarheter med öppen omdirigering. En angripare kan utnyttja en öppen omdirigeringsrisk för att använda din webbplats för att ge utseendet på en legitim URL, men omdirigera en intet ont anande besökare till en nätfiskewebbplats eller en annan skadlig webbsida.
CA3008: Granska koden för XPath-inmatningssårbarheter När du arbetar med ej betrodda indata bör du vara medveten om XPath-inmatningsattacker. Om du skapar XPath-frågor med ej betrodda indata kan en angripare manipulera frågan på ett skadligt sätt för att returnera ett oavsiktligt resultat och eventuellt avslöja innehållet i den efterfrågade XML-koden.
CA3009: Granska koden för sårbarheter vid XML-inmatning När du arbetar med ej betrodda indata bör du tänka på XML-inmatningsattacker.
CA3010: Granska koden för XAML-inmatningssårbarheter När du arbetar med ej betrodda indata bör du tänka på XAML-inmatningsattacker. XAML är ett markeringsspråk som direkt representerar instansiering och körning av objekt. Det innebär att element som skapas i XAML kan interagera med systemresurser (till exempel nätverksåtkomst och filsystems-I/O).
CA3011: Granska koden för säkerhetsproblem med DLL-inmatning När du arbetar med ej betrodda indata bör du tänka på att läsa in kod som inte är betrodd. Om ditt webbprogram läser in obetrodd kod kan en angripare kanske mata in skadliga DLL:er i processen och köra skadlig kod.
CA3012: Granska koden för sårbarheter vid regex-inmatning När du arbetar med ej betrodda indata bör du tänka på regex-inmatningsattacker. En angripare kan använda regex-inmatning för att ändra ett reguljärt uttryck på ett skadligt sätt, för att få regex att matcha oavsiktliga resultat eller för att göra regex-användningen överdriven CPU som resulterar i en Denial of Service-attack.
CA3061: Lägg inte till schema efter URL Använd inte den osäkra överlagringen av metoden Lägg till eftersom den kan orsaka farliga externa referenser.
CA3075: Osäker DTD-bearbetning Om du använder osäkra DTDProcessing-instanser eller refererar till externa entitetskällor kan parsern acceptera ej betrodda indata och lämna ut känslig information till angripare.
CA3076: Osäker XSLT-skriptkörning Om du kör XSLT (Extensible Stylesheet Language Transformations) i .NET-program på ett osäkert sätt kan processorn lösa obetrodda URI-referenser som kan avslöja känslig information för angripare, vilket leder till Denial of Service- och Cross-Site-attacker.
CA3077: Osäker bearbetning i API-design, XML-dokument och XML-textläsare När du utformar ett API som härletts från XMLDocument och XMLTextReader bör du tänka på DtdProcessing. Om du använder osäkra DTDProcessing-instanser när du refererar till eller löser externa entitetskällor eller anger osäkra värden i XML kan det leda till att information avslöjas.
CA3147: Markera verbhanterare med ValidateAntiForgeryToken När du utformar en ASP.NET MVC-styrenhet bör du tänka på förfalskningsattacker mellan webbplatser. En förfalskningsattack mellan webbplatser kan skicka skadliga begäranden från en autentiserad användare till din ASP.NET MVC-styrenhet.
CA5350: Använd inte svaga kryptografiska algoritmer Svaga krypteringsalgoritmer och hashfunktioner används idag av ett antal skäl, men de bör inte användas för att garantera konfidentialiteten eller integriteten för de data som de skyddar. Den här regeln utlöses när den hittar TripleDES-, SHA1- eller RIPEMD160-algoritmer i koden.
CA5351: Använd inte brutna kryptografiska algoritmer Brutna kryptografiska algoritmer anses inte vara säkra och deras användning bör starkt avskräckas. Den här regeln utlöses när den hittar MD5-hashalgoritmen eller antingen DES- eller RC2-krypteringsalgoritmerna i koden.
CA5358: Använd inte osäkra chifferlägen Använd inte osäkra chifferlägen
CA5359: Inaktivera inte certifikatverifiering Ett certifikat kan hjälpa dig att autentisera serverns identitet. Klienter bör verifiera servercertifikatet för att säkerställa att begäranden skickas till den avsedda servern. Om ServerCertificateValidationCallback alltid returnerar godkänns truevalideringen av alla certifikat.
CA5360: Anropa inte farliga metoder vid deserialisering Osäker deserialisering är en säkerhetsrisk som uppstår när obetrodda data används för att missbruka logiken i ett program, orsaka en DoS-attack (Denial-of-Service) eller till och med köra godtycklig kod när den deserialiseras. Det är ofta möjligt för skadliga användare att missbruka dessa deserialiseringsfunktioner när programmet deserialiserar ej betrodda data som står under deras kontroll. Mer specifikt anropar du farliga metoder i processen för deserialisering. Lyckade osäkra deserialiseringsattacker kan göra det möjligt för en angripare att utföra attacker som DoS-attacker, förbikoppling av autentisering och körning av fjärrkod.
CA5361: Inaktivera inte Schannel-användning av stark kryptografi Inställningen Switch.System.Net.DontEnableSchUseStrongCrypto för att true försvaga kryptografi som används i utgående TLS-anslutningar (Transport Layer Security). Svagare kryptografi kan äventyra konfidentialiteten för kommunikationen mellan ditt program och servern, vilket gör det lättare för angripare att tjuvlyssna känsliga data.
CA5362: Potentiell referenscykel i deserialiserat objektdiagram Om deserialisera ej betrodda data måste all kod som bearbetar det deserialiserade objektdiagrammet hantera referenscykler utan att gå in i oändliga loopar. Detta inkluderar både kod som ingår i ett återanrop till deserialisering och kod som bearbetar objektdiagrammet när deserialiseringen har slutförts. Annars kan en angripare utföra en Överbelastningsattack med skadliga data som innehåller en referenscykel.
CA5363: Inaktivera inte validering av begäran Validering av begäranden är en funktion i ASP.NET som undersöker HTTP-begäranden och avgör om de innehåller potentiellt farligt innehåll som kan leda till inmatningsattacker, inklusive skript mellan webbplatser.
CA5364: Använd inte inaktuella säkerhetsprotokoll Transport Layer Security (TLS) skyddar kommunikationen mellan datorer, oftast med Hypertext Transfer Protocol Secure (HTTPS). Äldre protokollversioner av TLS är mindre säkra än TLS 1.2 och TLS 1.3 och är mer benägna att ha nya säkerhetsrisker. Undvik äldre protokollversioner för att minimera risken.
CA5365: Inaktivera inte HTTP-rubrikkontroll HTTP-rubrikkontroll möjliggör kodning av vagnreturen och nya radtecken, \r och \n, som finns i svarshuvuden. Den här kodningen kan bidra till att undvika inmatningsattacker som utnyttjar ett program som ekar ej betrodda data som ingår i rubriken.
CA5366: Använda XmlReader för datauppsättningens läs-XML Om du använder en DataSet för att läsa XML med ej betrodda data kan farliga externa referenser läsas in, vilket bör begränsas med hjälp av en XmlReader med en säker lösning eller med DTD-bearbetning inaktiverad.
CA5367: Serialisera inte typer med pekarfält Den här regeln kontrollerar om det finns en serialiserbar klass med ett pekarfält eller en egenskap. Medlemmar som inte kan serialiseras kan vara en pekare, till exempel statiska medlemmar eller fält markerade med NonSerializedAttribute.
CA5368: Ange ViewStateUserKey för klasser som härleds från sidan ViewStateUserKey Om du anger egenskapen kan du förhindra attacker mot ditt program genom att låta dig tilldela en identifierare till visningstillståndsvariabeln för enskilda användare så att angripare inte kan använda variabeln för att generera en attack. Annars kommer det att finnas säkerhetsrisker för förfalskning av begäranden mellan webbplatser.
CA5369: Använda XmlReader för Deserialize Bearbetning av obetrodda DTD- och XML-scheman kan göra det möjligt att läsa in farliga externa referenser, vilket bör begränsas med hjälp av en XmlReader med en säker lösning eller med DTD- och XML-infogad schemabearbetning inaktiverad.
CA5370: Använd XmlReader för att validera läsare Bearbetning av obetrodda DTD- och XML-scheman kan möjliggöra inläsning av farliga externa referenser. Den här farliga inläsningen kan begränsas med hjälp av en XmlReader med en säker lösning eller med DTD- och XML-infogad schemabearbetning inaktiverad.
CA5371: Använd XmlReader för schemaläsning Bearbetning av obetrodda DTD- och XML-scheman kan möjliggöra inläsning av farliga externa referenser. Om du använder en XmlReader med en säker lösning eller med DTD- och XML-inline-schemabearbetning inaktiverad begränsas detta.
CA5372: Använda XmlReader för XPathDocument Bearbetning av XML från ej betrodda data kan läsa in farliga externa referenser, som kan begränsas med hjälp av en XmlReader med en säker lösning eller med DTD-bearbetning inaktiverad.
CA5373: Använd inte föråldrad nyckelhärledningsfunktion Den här regeln identifierar anrop av svaga nyckelhärledningsmetoder System.Security.Cryptography.PasswordDeriveBytes och Rfc2898DeriveBytes.CryptDeriveKey. System.Security.Cryptography.PasswordDeriveBytes använde en svag algoritm PBKDF1.
CA5374: Använd inte XslTransform Den här regeln kontrollerar om System.Xml.Xsl.XslTransform instansieras i koden. System.Xml.Xsl.XslTransform är nu föråldrad och bör inte användas.
CA5375: Använd inte signatur för delad åtkomst för kontot Ett KONTO-SAS kan delegera åtkomst till läs-, skriv- och borttagningsåtgärder på blobcontainrar, tabeller, köer och filresurser som inte tillåts med en tjänst-SAS. Den stöder dock inte principer på containernivå och har mindre flexibilitet och kontroll över de behörigheter som beviljas. När skadliga användare får det kommer ditt lagringskonto att komprometteras enkelt.
CA5376: Använd SharedAccessProtocol HttpsOnly SAS är känsliga data som inte kan transporteras i oformaterad text på HTTP.
CA5377: Använd åtkomstprincip på containernivå En åtkomstprincip på containernivå kan ändras eller återkallas när som helst. Det ger större flexibilitet och kontroll över de behörigheter som beviljas.
CA5378: Inaktivera inte ServicePointManagerSecurityProtocols Inställning Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols för att true begränsa TLS-anslutningar (WCF) TLS (Transport Layer Security) till att använda TLS 1.0. Den versionen av TLS kommer att vara inaktuell.
CA5379: Använd inte algoritmen för svag nyckelhärledningsfunktion Klassen Rfc2898DeriveBytes använder som standard algoritmen SHA1 . Du bör ange den hash-algoritm som ska användas i vissa överlagringar av konstruktorn med SHA256 eller högre. Observera att HashAlgorithm egenskapen bara har en get accessor och inte har någon overridden modifierare.
CA5380: Lägg inte till certifikat i rotarkivet Den här regeln identifierar kod som lägger till ett certifikat i certifikatarkivet Betrodda rotcertifikatutfärdare. Som standard konfigureras certifikatarkivet Betrodda rotcertifikatutfärdare med en uppsättning offentliga certifikatutfärdare som uppfyller kraven i Microsoft Root Certificate Program.
CA5381: Kontrollera att certifikat inte läggs till i rotarkivet Den här regeln identifierar kod som potentiellt lägger till ett certifikat i certifikatarkivet Betrodda rotcertifikatutfärdare. Som standard konfigureras certifikatarkivet betrodda rotcertifikatutfärdare med en uppsättning offentliga certifikatutfärdare som uppfyller kraven i Microsoft Root Certificate Program.
CA5382: Använda säkra cookies i ASP.NET Core Program som är tillgängliga via HTTPS måste använda säkra cookies, vilket anger för webbläsaren att cookien endast ska överföras med secure sockets layer (SSL).
CA5383: Se till att använda säkra cookies i ASP.NET Core Program som är tillgängliga via HTTPS måste använda säkra cookies, vilket anger för webbläsaren att cookien endast ska överföras med secure sockets layer (SSL).
CA5384: Använd inte algoritmen för digital signatur (DSA) DSA är en svag asymmetrisk krypteringsalgoritm.
CA5385: Använd algoritmen Rivest–Shamir–Adleman (RSA) med tillräcklig nyckelstorlek En RSA-nyckel som är mindre än 2 048 bitar är mer sårbar för råstyrkeattacker.
CA5386: Undvik hårdkodning av SecurityProtocolType-värde Transport Layer Security (TLS) skyddar kommunikationen mellan datorer, oftast med Hypertext Transfer Protocol Secure (HTTPS). Protokollversionerna TLS 1.0 och TLS 1.1 är inaktuella, medan TLS 1.2 och TLS 1.3 är aktuella. I framtiden kan TLS 1.2 och TLS 1.3 vara inaktuella. Undvik att hårdkoda en protokollversion och rikta in dig på minst .NET Framework v4.7.1 för att säkerställa att programmet förblir säkert.
CA5387: Använd inte funktionen för svag nyckelhärledning med otillräckligt iterationsantal Den här regeln kontrollerar om en kryptografisk nyckel genererades av Rfc2898DeriveBytes med ett iterationsantal på mindre än 100 000. Ett högre iterationsantal kan bidra till att minska risken för ordlisteattacker som försöker gissa den genererade kryptografiska nyckeln.
CA5388: Se till att det finns tillräckligt med iterationsantal vid användning av svag nyckelhärledningsfunktion Den här regeln kontrollerar om en kryptografisk nyckel genererades av Rfc2898DeriveBytes med ett iterationsantal som kan vara mindre än 100 000. Ett högre iterationsantal kan bidra till att minska risken för ordlisteattacker som försöker gissa den genererade kryptografiska nyckeln.
CA5389: Lägg inte till arkivobjektets sökväg till målfilens systemsökväg Filsökvägen kan vara relativ och kan leda till filsystemåtkomst utanför den förväntade målsökvägen för filsystemet, vilket leder till skadliga konfigurationsändringar och fjärrkodkörning via lay-and-wait-teknik.
CA5390: Hårdkoda inte krypteringsnyckeln För att en symmetrisk algoritm ska lyckas måste den hemliga nyckeln endast vara känd för avsändaren och mottagaren. När en nyckel är hårdkodad identifieras den enkelt. Även med kompilerade binärfiler är det enkelt för skadliga användare att extrahera den. När den privata nyckeln har komprometterats kan chiffertexten dekrypteras direkt och skyddas inte längre.
CA5391: Använda antiforgery-token i ASP.NET Core MVC-styrenheter Hantering av en POST, PUT, PATCHeller DELETE begäran utan att verifiera en antiforgery-token kan vara sårbart för förfalskningsattacker mellan webbplatser. En förfalskningsattack mellan webbplatser kan skicka skadliga begäranden från en autentiserad användare till din ASP.NET Core MVC-styrenhet.
CA5392: Använd attributet DefaultDllImportSearchPaths för P/Invokes P/Invoke-funktioner använder DllImportAttribute som standard avsökning av ett antal kataloger, inklusive den aktuella arbetskatalogen som biblioteket ska läsa in. Detta kan vara ett säkerhetsproblem för vissa program, vilket leder till DLL-kapning.
CA5393: Använd inte osäkert DllImportSearchPath-värde Det kan finnas en skadlig DLL i standardkatalogerna för DLL-sökning och sammansättningskataloger. Eller, beroende på var ditt program körs från, kan det finnas en skadlig DLL i programmets katalog.
CA5394: Använd inte osäker slumpmässighet Om du använder en kryptografiskt svag pseudo-slumptalsgenerator kan en angripare förutsäga vilket säkerhetskänsligt värde som ska genereras.
CA5395: Miss HttpVerb-attribut för åtgärdsmetoder Alla åtgärdsmetoder som skapar, redigerar, tar bort eller på annat sätt ändrar data måste skyddas med antiforgery-attributet från förfalskningsattacker mellan webbplatser. Att utföra en GET-åtgärd bör vara en säker åtgärd som inte har några biverkningar och inte ändrar dina bevarade data.
CA5396: Ange HttpOnly till true för HttpCookie Som ett djupskyddsmått kontrollerar du att säkerhetskänsliga HTTP-cookies är markerade som HttpOnly. Detta indikerar att webbläsare inte bör tillåta skript från att komma åt cookies. Inmatade skadliga skript är ett vanligt sätt att stjäla cookies.
CA5397: Använd inte inaktuella SslProtocols-värden Transport Layer Security (TLS) skyddar kommunikationen mellan datorer, oftast med Hypertext Transfer Protocol Secure (HTTPS). Äldre protokollversioner av TLS är mindre säkra än TLS 1.2 och TLS 1.3 och är mer benägna att ha nya säkerhetsrisker. Undvik äldre protokollversioner för att minimera risken.
CA5398: Undvik hårdkodade SslProtocols-värden Transport Layer Security (TLS) skyddar kommunikationen mellan datorer, oftast med Hypertext Transfer Protocol Secure (HTTPS). Protokollversionerna TLS 1.0 och TLS 1.1 är inaktuella, medan TLS 1.2 och TLS 1.3 är aktuella. I framtiden kan TLS 1.2 och TLS 1.3 vara inaktuella. Undvik att hårdkoda en protokollversion för att säkerställa att programmet förblir säkert.
CA5399: Inaktivera definitivt kontrollen av listan över återkallade HttpClient-certifikat Ett återkallat certifikat är inte längre betrott. Det kan användas av angripare som skickar vissa skadliga data eller stjäl känsliga data i HTTPS-kommunikation.
CA5400: Kontrollera att kontrollen av listan över återkallade HttpClient-certifikat inte är inaktiverad Ett återkallat certifikat är inte längre betrott. Det kan användas av angripare som skickar vissa skadliga data eller stjäl känsliga data i HTTPS-kommunikation.
CA5401: Använd inte CreateEncryptor med icke-standard IV Symmetrisk kryptering bör alltid använda en icke-repeterbar initieringsvektor för att förhindra ordlisteattacker.
CA5402: Använd CreateEncryptor med standard-IV Symmetrisk kryptering bör alltid använda en icke-repeterbar initieringsvektor för att förhindra ordlisteattacker.
CA5403: Hårdkoda inte certifikat Parametern data eller rawData för en X509Certificate konstruktor X509Certificate2 är hårdkodad.
CA5404: Inaktivera inte tokenverifieringskontroller TokenValidationParameters egenskaper som styr tokenverifiering bör inte anges till false.
CA5405: Hoppa inte alltid över tokenverifiering i ombud Återanropet som tilldelats till AudienceValidator eller LifetimeValidator returnerar truealltid .
IL3000: Undvik att komma åt sammansättningsfilens sökväg när du publicerar som en enda fil Undvik att komma åt sökvägen till sammansättningsfilen när du publicerar som en enda fil.
IL3001: Undvik att komma åt sammansättningsfilens sökväg när du publicerar som en enskild fil Undvik att komma åt sökvägen till sammansättningsfilen när du publicerar som en enda fil.
IL3002: Undvik att anropa medlemmar som kommenterats med "RequiresAssemblyFilesAttribute" när de publicerar som en enda fil Undvik att anropa medlemmar som kommenterats med "RequiresAssemblyFilesAttribute" när du publicerar som en enda fil
IL3003: "RequiresAssemblyFilesAttribute"-anteckningar måste matcha alla gränssnittsimplementeringar eller åsidosättningar. Anteckningarna "RequiresAssemblyFilesAttribute" måste matcha alla gränssnittsimplementeringar eller åsidosättningar.

Förklaring

I följande tabell visas den typ av information som tillhandahålls för varje regel i referensdokumentationen.

Objekt beskrivning
Typ TypeName för regeln.
Regel-ID Den unika identifieraren för regeln. RuleId och Category används för undertryckning i källan av en varning.
Kategori Kategorin för regeln, till exempel säkerhet.
Korrigeringen är icke-bakåtkompatibel Om korrigeringen för en överträdelse av regeln är en icke-bakåtkompatibel ändring. Icke-bakåtkompatibel ändring innebär att en sammansättning som har ett beroende av målet som orsakade överträdelsen inte kompileras om med den nya fasta versionen eller misslyckas vid körning på grund av ändringen. När flera korrigeringar är tillgängliga och minst en korrigering är en icke-bakåtkompatibel ändring och en korrigering inte är det, anges både "Breaking" och "Non-breaking".
Orsak Den specifika hanterade kod som gör att regeln genererar en varning.
beskrivning Diskuterar de problem som ligger bakom varningen.
Så här åtgärdar du överträdelser Förklarar hur du ändrar källkoden så att den uppfyller regeln och förhindrar att den genererar en varning.
När du ska ignorera varningar Beskriver när det är säkert att ignorera en varning från regeln.
Exempelkod Exempel som bryter mot regeln och korrigerade exempel som uppfyller regeln.
Relaterade regler Relaterade regler.