Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Om du samarbetar med ditt team när du skapar kod är det ofta användbart att ange att en varning inte är tillämplig. Att förhindra kodanalysöverträdelser indikerar för teammedlemmar att koden har granskats och varningen kan ignoreras. I följande avsnitt beskrivs de olika sätten att förhindra kodanalysöverträdelser med hjälp av Visual Studio IDE.
Förhindra överträdelser med hjälp av EditorConfig-filen
I EditorConfig-filen för din lösning eller ditt projekt lägger du till en post för varje regel som du vill konfigurera och anger dess allvarlighetsgrad till none. Till exempel dotnet_diagnostic.CA1822.severity = none. Mer information finns i Konfigurera regel allvarlighetsgrad manuellt i en EditorConfig-fil. Information om hur du lägger till en EditorConfig-fil finns i Lägga till en EditorConfig-fil i ett projekt.
Förhindra överträdelser i källkoden
Du kan förhindra överträdelser i källkoden med hjälp av ett förprocessordirektiv som undertrycker överträdelser för en viss kodrad:
- C#: #pragma varning
- Visual Basic: Stäng av varning
Du kan också använda attributet SuppressMessageAttribute för att förhindra en varning i C#- och Visual Basic-koden.
Förhindra överträdelser med hjälp av kodredigeraren
Följ dessa steg för att förhindra överträdelser med hjälp av kodredigeraren:
Placera markören i kodraden med överträdelsen och tryck på Ctrl-period+(.) eller Alt+Retur för att öppna snabbåtgärder-menyn .
Välj Ignorera eller konfigurera problem>Utelämna <regelnummer> och välj sedan antingen i Källa eller i Källa (attribut).
Om du väljer i Källa visas en förhandsversion av förprocessordirektivet som lagts till i koden.
Om du väljer källa (attribut) visas en förhandsgranskning av attributet SuppressMessageAttribute som lagts till i koden.
Förhindra överträdelser med hjälp av fellistan
Följ dessa steg om du vill förhindra överträdelser med hjälp av fönstret Fellista :
I fönstret Fellista väljer du de regler som du vill ignorera.
Högerklicka och välj sedan Ignorera>i källa.
Dialogrutan Förhandsgranska ändringar öppnas och visar en förhandsversion av varningsdirektivet C# #pragma eller Visual Basic #Disable som lagts till i källkoden.
Välj Använd för att spara ändringarna i kodfilen.
Exkludera fellista– byggdiagnostik
Om du inte ser menyalternativet Utelämna i fönstret Fellista är överträdelsen sannolikt från en version och inte liveanalys. Fönstret Fellista visar diagnostik eller regelöverträdelser från både live-kodanalys och kompileringar. Eftersom byggdiagnostik kan vara inaktuell, till exempel om du redigerade koden för att åtgärda överträdelsen men inte återskapade den, kan du inte alltid utelämna den här diagnostiken från fellistan.
Diagnostik från liveanalys, eller IntelliSense, är alltid up-touppdaterad med aktuella källor och kan alltid undertryckas från Fellistan. Följ dessa steg om du vill undanta byggdiagnostik från ditt val:
Ändra valet i listrutan för källfilter i Fellista från Build + IntelliSense till IntelliSense Only.
Välj den diagnostik som du vill ignorera och fortsätt enligt beskrivningen tidigare.
Förhindra överträdelser med hjälp av en global undertryckningsfil
Den globala undertryckningsfilen använder attributet SuppressMessageAttribute för att förhindra kodöverträdelser.
Använda en global undertryckningsfil från kodredigeraren
Följ dessa steg för att förhindra överträdelser med en global undertryckningsfil med hjälp av kodredigeraren:
I kodredigeraren placerar du markören på en kodrad med en överträdelse och trycker på Ctrl-period+(.) eller Alt+Retur för att öppna snabbåtgärder-menyn .
Välj Utelämna <regelnummer> och välj sedan i Undertryckningsfil.
Visual Studio skapar en flik i kodredigeraren som innehåller den nya globala undertryckningsfilen.
Använd en global undertryckningsfil från fellistan
För att undertrycka överträdelser med en global undertryckningsfil med hjälp av fönstret Fellista, följ dessa steg:
I fönstret Fellista väljer du de regler som du vill ignorera.
Högerklicka och välj sedan Undertryck>i undertryckningsfilen.
Dialogrutan Förhandsgranska ändringar öppnas och visar en förhandsgranskning av attributet SuppressMessageAttribute som lagts till i den globala undertryckningsfilen.
Välj Använd för att spara den globala undertryckningsfilen.
Undertryck alla aktuella överträdelser
Att undertrycka alla aktuella överträdelser kallas ibland baselining. Följ dessa steg om du vill förhindra alla aktuella överträdelser i en lösning eller ett projekt:
I menyraden i Visual Studio väljer du Analysera>Bygg och Undertryck aktiva problem.
Välj För lösning om du vill förhindra överträdelser för hela lösningen eller välj Endast Projektnamn <> för att förhindra överträdelser för projektet.
Förhindra överträdelser med hjälp av projektinställningar
Följ dessa steg för att förhindra överträdelser med hjälp av Projektinställningar för Solution Explorer:
Välj ditt projekt i Solution Explorer.
Högerklicka och välj sedan Egenskaper (eller tryck på Alt + Retur).
I fönstret Egenskaper väljer du Kodanalys i den vänstra rutan och avmarkerar sedan Utelämna resultat från genererad kod.
Förhindra överträdelser med hjälp av en regeluppsättning
Avmarkera kryssrutan bredvid dess namn från regeluppsättningsredigeraren eller ange Åtgärd till Ingen.
Dämpning i källkoden och attributet SuppressMessageAttribute
Undertryckning i källan (ISS) använder SuppressMessageAttribute attributet för att undertrycka en varning. Du kan lägga till SuppressMessageAttribute attributet i källfilen nära kodsegmentet som genererade varningen.
Du kan antingen ange attributet manuellt i kodredigeraren eller lägga till attributet automatiskt på följande sätt:
I kodredigeraren placerar du markören på en kodrad med en överträdelse och trycker på Ctrl-period+(.) eller Alt+Retur för att öppna snabbåtgärder-menyn .
Välj Ignorera eller konfigurera problem>Utelämna <regelnummer> på snabbåtgärder-menyn .
Gör något av följande:
Välj i Källa (attribut).
Visual Studio lägger till ett
SuppressMessageAttributeattribut i koden.Välj i Undertryckningsfil.
Visual Studio skapar en flik i kodredigeraren som innehåller en ny global undertryckningsfil med
SuppressMessageAttributeattribut.
Attributet SuppressMessageAttribute är ett villkorsattribut som ingår i metadata för din hanterade kodsammansättning. Det här attributet inkluderas endast om kompileringssymbolen CODE_ANALYSIS definieras vid kompileringstillfället.
I C++ och CLI-kod använder du makrona CA_SUPPRESS_MESSAGE eller CA_GLOBAL_SUPPRESS_MESSAGE i huvudfilen för att lägga till attributet.
Om du migrerar ett projekt till den senaste versionen av Visual Studio kan du se ett stort antal kodanalysvarningar. Om du inte är redo att åtgärda varningarna kan du ignorera alla genom att välja Analysera>skapa och förhindra aktiva problem.
Anmärkning
Använd inte undertryckningar i källkoden i produktionsbyggen för att förhindra att undertryckningsmetadata av misstag skickas med.
format för attributet SuppressMessageAttribute
Attributet SuppressMessageAttribute har följande format:
[Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")]
Egenskaperna för attributet är:
Category: Regelns kategori. Mer information om regelkategorier för kodanalys finns i Kodkvalitetsregler.CheckId:Identifieraren för regeln. Supporten innehåller både ett kortnamn och ett långnamn för regelidentifieraren. Det korta namnet ärCAXXXX; det långa namnet ärCAXXXX:FriendlyTypeName.Justification: Den text som används för att dokumentera orsaken till att meddelandet utelämnas.MessageId: Den unika identifieraren för problemet för varje meddelande.Scope: Målet där varningen undertrycks. Om målet inte anges anger systemet det till attributets mål. Exempel på omfång som stöds är:module: Det här omfånget undertrycker varningar mot en samling. Det är en global undertryckning som gäller för hela projektet.resource: (endast äldre analys) Det här området undertrycker varningar i diagnostikinformation som skrivs till resursfiler som ingår i modulen (assembly). Det här omfånget är inte läst eller respekterat i C#/VB-kompilatorer för Roslyn Analyzer-diagnostik, som endast analyserar källfiler.type: Det här omfånget dämpar varningar mot en typ.member: Den här räckvidden förhindrar varningar mot en medlem.namespace: Det här omfånget undertrycker varningar mot själva namnområdet. Det undertrycker inte varningar mot typer i namnområdet.namespaceanddescendants: (Kräver kompilatorversion 3.x eller senare och Visual Studio 2019 eller senare) Det här omfånget utelämnar varningar i ett namnområde och alla dess underordnade symboler. Äldre analys ignorerar värdetnamespaceanddescendants.
Target: En identifierare som anger målet där varningen undertrycks. Den måste innehålla ett fullständigt kvalificerat komponentnamn.
När du ser varningar i Visual Studio kan du visa exempel på SuppressMessageAttribute genom att lägga till en undertryckning i den globala undertryckningsfilen. Undertryckningsattributet och dess obligatoriska egenskaper visas i ett förhandsgranskningsfönster.
SuppressMessageAttribute-användning
Kodanalysvarningar ignoreras på den nivå som SuppressMessageAttribute attributet tillämpas på. Attributet kan till exempel tillämpas på sammansättnings-, modul-, typ-, medlems- eller parameternivå. Syftet med att tillämpa det här attributet är att nära koppla undertryckningsinformationen till koden där överträdelsen inträffar.
Den allmänna formen av undertryckning innehåller regelkategorin och en regelidentifierare, som innehåller en valfri mänsklig läsbar representation av regelnamnet. Till exempel:
[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]
Om det finns strikta prestandaorsaker för att minimera metadata för undertryckning i källan kan regelnamnet utelämnas. Regelkategorin och dess regel-ID utgör tillsammans en tillräckligt unik regelidentifierare. Till exempel:
[SuppressMessage("Microsoft.Design", "CA1039")]
Av underhållsskäl rekommenderas inte utelämnande av regelnamnet.
Förhindra selektiva överträdelser i en metodtext (endast äldre analys)
Undertryckningsattribut kan tillämpas på en metod, men kan inte bäddas in i en metodtext. Alla överträdelser av en viss regel undertrycks om du lägger till SuppressMessageAttribute attributet i metoden.
I vissa fall kanske du vill suppressa ett specifikt överträdelsetillfälle. Tänk på exemplet där framtida kod inte automatiskt undantas från kodanalysregeln. Med vissa regler för kodanalys kan du förhindra en viss instans av överträdelsen med hjälp av egenskapen MessageId för attributet SuppressMessageAttribute. I allmänhet respekterar äldre regler för överträdelser av en viss symbol (en lokal variabel eller parameter) egenskapen MessageId.
CA1500:VariableNamesShouldNotMatchFieldNames är ett exempel på en sådan regel. Äldre regler för överträdelser av körbar kod (icke-symbol) respekterar dock inte egenskapen MessageId . Analysverktygen för .NET Compiler Platform ("Roslyn") respekterar MessageId inte heller egenskapen.
Om du vill förhindra en viss symbolöverträdelse av en regel anger du symbolnamnet för MessageId attributets SuppressMessageAttribute egenskap. I följande exempel visas kod med två överträdelser av CA1500:VariableNamesShouldNotMatchFieldNames: en överträdelse för variabeln name och en annan överträdelse för variabeln age . Endast överträdelsen för symbolen age undertrycks.
public class Animal
{
int age;
string name;
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1500:VariableNamesShouldNotMatchFieldNames", MessageId = "age")]
private void PrintInfo()
{
int age = 5;
string name = "Charlie";
Console.WriteLine($"Age {age}, Name {name}");
}
}
Undertryckningar på global nivå
Verktyget för analys av hanterad kod undersöker de SuppressMessageAttribute attribut som tillämpas på sammansättnings-, modul-, typ-, medlems- eller parameternivå. Den rapporterar också överträdelser mot namnområden och resurser. Dessa överträdelser måste tillämpas på global nivå och är begränsade och riktade. Följande meddelande undertrycker till exempel ett namnområdesfel:
[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]
För undertryckningar på global nivå:
När du undertrycker en varning med ett
namespaceomfång undertrycks varningen mot själva namnområdet. Den undertrycker inte varningen mot typer i namnområdet.Targetinnehåller alltid det fullständigt kvalificerade objektnamnet.Eventuella undertryckningar kan uttryckas genom att ange ett explicit omfång. Dessa begränsningar måste finnas på global nivå. Du kan inte ange undertryckning på medlemsnivå genom att ändra en typ.
Undertryckningar på global nivå är det enda sättet att utelämna meddelanden som refererar till kompilatorgenererad kod som inte mappas till uttryckligen angivna användarkällor. Följande kod undertrycker till exempel en överträdelse mot en kompilator-genererad konstruktor:
[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]
Global undertryckningsfil
Den globala undertryckningsfilen upprätthåller undertryckningar som antingen är undertryckningar på global nivå eller undertryckningar som inte anger något mål. Undertryckningar för överträdelser på sammansättningsnivå lagras till exempel i den här filen. Dessutom lagras vissa ASP.NET undertryckningar i den här filen eftersom inställningarna på projektnivå inte är tillgängliga för kod som ligger bakom ett formulär. Visual Studio skapar och lägger till en global undertryckningsfil i projektet första gången du väljer alternativet I projektundertryckningsfil i kommandot Undertryck i fönstret Fellista.
Modulbegränsningsområde
Du kan förhindra kodkvalitetsöverträdelser för hela sammansättningen med hjälp av omfånget module .
Följande attribut i projektfilen GlobalSuppressions undertrycker till exempel ConfigureAwait-överträdelsen för ett ASP.NET Core-projekt:
[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Reliability", "CA2007:Consider calling ConfigureAwait on the awaited task", Justification = "ASP.NET Core doesn't use thread context to store request context.", Scope = "module")]
Genererad kod
Hanterade kodkompilatorer och vissa externa verktyg genererar kod som hjälper till att snabbt utveckla kod. Kompilatorgenererad kod som visas i källfiler markeras med attributet GeneratedCodeAttribute .
För källkodsanalys kan du utelämna meddelanden i genererad kod i en .editorconfig-fil . Mer information finns i Exkludera genererad kod.
För äldre kodanalys kan du välja om du vill utelämna kodanalysvarningar och fel för genererad kod. Information om hur du utelämnar sådana varningar och fel finns i Ignorera kodanalysvarningar för genererad kod.
Anmärkning
Kodanalys ignorerar GeneratedCodeAttribute när den tillämpas på antingen en hel sammansättning eller en enskild parameter.