Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Als u met uw team samenwerkt terwijl u code maakt, is het vaak handig om aan te geven dat een waarschuwing niet van toepassing is. Het onderdrukken van schendingen van codeanalyse geeft aan dat teamleden de code hebben gecontroleerd en dat de waarschuwing kan worden onderdrukt. In de volgende secties worden de verschillende manieren beschreven om schendingen van codeanalyses te onderdrukken met behulp van de Visual Studio IDE.
Schendingen onderdrukken met behulp van het EditorConfig-bestand
Voeg in het EditorConfig-bestand voor uw oplossing of project een vermelding toe voor elke regel die u wilt configureren en stel de ernst ervan nonein op. Bijvoorbeeld: dotnet_diagnostic.CA1822.severity = none. Zie De ernst van regels handmatig configureren in een EditorConfig-bestand voor meer informatie. Zie Een EditorConfig-bestand toevoegen aan een project om een EditorConfig-bestand toe te voegen.
Schendingen in broncode onderdrukken
U kunt schendingen in uw broncode onderdrukken met behulp van een preprocessor-instructie, waardoor schendingen voor een specifieke regel code worden onderdrukt:
- C#: waarschuwing #pragma
- Visual Basic: waarschuwing uitschakelen
U kunt ook het kenmerk SuppressMessageAttribute gebruiken om een waarschuwing in uw C# en Visual Basic-code te onderdrukken.
Schendingen onderdrukken met behulp van de code-editor
Volg deze stappen om schendingen te onderdrukken met behulp van de code-editor:
Plaats de cursor in de coderegel met de overtreding en druk op Ctrl+Punt (.) of Alt+Enter om het menu Snelle Acties te openen.
Selecteer Problemen onderdrukken of configureren>, en kies vervolgens < of >.
Als u in Bron kiest, ziet u een voorbeeld van de preprocessorrichtlijn die aan uw code is toegevoegd.
Als u in bron (kenmerk) kiest, ziet u een voorbeeld van het kenmerk SuppressMessageAttribute dat aan uw code is toegevoegd.
Schendingen onderdrukken met behulp van de foutenlijst
Volg deze stappen om schendingen te onderdrukken met behulp van het venster Foutenlijst :
Selecteer in het venster Foutenlijst de regels die u wilt onderdrukken.
Klik met de rechtermuisknop en selecteer Onderdrukken>In Bron.
Het dialoogvenster Voorbeeldwijzigingen wordt geopend en toont een voorbeeld van de waarschuwingsrichtlijn C# #pragma of Visual Basic #Disable waarschuwingsrichtlijn die is toegevoegd aan de broncode.
Selecteer Toepassen om de wijzigingen in het codebestand op te slaan.
Verwerkingsdiagnose voor foutlijst uitsluiten
Als u de menuoptie Onderdrukken niet ziet in het venster Foutenlijst , is de schending waarschijnlijk afkomstig van een build en geen live-analyse. In het venster Foutenlijst worden diagnostische gegevens of regelschendingen weergegeven uit zowel live code-analyse als builds. Omdat builddiagnose verouderd kan zijn, bijvoorbeeld als u de code hebt bewerkt om de schending op te lossen, maar deze niet opnieuw hebt opgebouwd, kunt u deze diagnostische gegevens niet altijd onderdrukken uit de lijst met fouten.
Diagnostische gegevens van liveanalyse of IntelliSense zijn altijd up-to-datum met huidige bronnen en kunnen altijd worden onderdrukt uit de lijst met fouten. Volg deze stappen om builddiagnose uit te sluiten van uw selectie:
Wijzig in de vervolgkeuzelijst Foutlijst bronfilter de selectie van Build + IntelliSense naar IntelliSense uitsluitend.
Selecteer de diagnostische gegevens die u wilt onderdrukken en doorgaan zoals eerder is beschreven.
Schendingen onderdrukken met behulp van een globaal onderdrukkingsbestand
Het globale onderdrukkingsbestand maakt gebruik van het kenmerk SuppressMessageAttribute om codeschendingen te onderdrukken.
Gebruik een globaal onderdrukkingsbestand vanuit de code-editor.
Volg deze stappen om schendingen met een globaal onderdrukkingsbestand te onderdrukken met behulp van de code-editor:
Plaats in de code-editor de cursor op een regel met een overtreding en druk op Ctrl+ of Alt+Enter om het Snelle acties menu te openen.
Selecteer <, en kies vervolgens >.
Visual Studio maakt een tabblad in de code-editor met het nieuwe globale suppressiebestand.
Een globaal uitsluitingsbestand uit de foutenlijst gebruiken
Volg deze stappen om overtredingen met een globaal uitsluitingsbestand te onderdrukken, met behulp van het venster Foutenlijst:
Selecteer in het venster Foutenlijst de regels die u wilt onderdrukken.
Klik met de rechtermuisknop en selecteer Onderdrukken>In Onderdrukkingsbestand.
Het dialoogvenster Voorbeeldwijzigingen wordt geopend en toont een voorbeeld van het SuppressMessageAttribute kenmerk dat is toegevoegd aan het algemene onderdrukkingsbestand.
Klik op Toepassen om het algemene onderdrukkingsbestand op te slaan.
Alle huidige schendingen onderdrukken
Het onderdrukken van alle huidige overtredingen wordt soms baselining genoemd. Als u alle huidige schendingen in een oplossing of project wilt onderdrukken, voert u de volgende stappen uit:
Selecteer in de menubalk van Visual Studio Analyseren>Bouwen en actieve problemen onderdrukken.
Selecteer Oplossing voor het onderdrukken van schendingen voor de hele oplossing of selecteer Voor <projectnaam> om alleen schendingen voor uw project te onderdrukken.
Schendingen onderdrukken met projectinstellingen
Volg deze stappen om schendingen te onderdrukken met de projectinstellingen van Solution Explorer:
Selecteer uw project in Solution Explorer.
Klik met de rechtermuisknop en selecteer Eigenschappen (of druk op Alt + Enter).
Selecteer in het venster EigenschappenCodeanalyse in het linkerdeelvenster en wis Onderdruk resultaten van gegenereerde code.
Schendingen onderdrukken met behulp van een regelset
Schakel in de editor voor regelsets het selectievakje naast de naam uit of stel Actie in op Geen.
Onderdrukking in de bron en het kenmerk SuppressMessageAttribute
In-source onderdrukking (ISS) gebruikt het SuppressMessageAttribute kenmerk om een waarschuwing te onderdrukken. U kunt het SuppressMessageAttribute kenmerk toevoegen aan het bronbestand in de buurt van het codesegment dat de waarschuwing heeft gegenereerd.
U kunt het kenmerk handmatig invoeren in de code-editor of het kenmerk automatisch als volgt toevoegen:
Plaats in de code-editor de cursor op een regel met een overtreding en druk op Ctrl+ of Alt+Enter om het Snelle acties menu te openen.
Selecteer Onderdrukken of configureren van problemen>< vanuit het menu >.
Ga op een van de volgende manieren te werk:
Selecteer in Bron (kenmerk).
Visual Studio voegt een
SuppressMessageAttributekenmerk toe aan uw code.Kies in onderdrukkingsbestand.
Visual Studio maakt een tabblad in de code-editor met een nieuw globaal onderdrukkingsbestand met
SuppressMessageAttributekenmerken.
Het SuppressMessageAttribute kenmerk is een voorwaardelijk kenmerk, dat is opgenomen in de metagegevens van uw beheerde code-assembly. Dit kenmerk is alleen opgenomen als het compilatiesymbool tijdens het CODE_ANALYSIS compileren is gedefinieerd.
Gebruik alleen in C++- en CLI-code de macro's CA_SUPPRESS_MESSAGE of CA_GLOBAL_SUPPRESS_MESSAGE in het headerbestand om het kenmerk toe te voegen.
Als u een project migreert naar de nieuwste versie van Visual Studio, ziet u mogelijk een groot aantal waarschuwingen voor codeanalyse. Als u niet klaar bent om de waarschuwingen op te lossen, kunt u ze allemaal onderdrukken door Analyseren>Build en Actieve problemen onderdrukken te selecteren.
Opmerking
Gebruik geen in-source onderdrukkingen voor release-builds om te voorkomen dat de metagegevens voor in-source onderdrukking per ongeluk worden verzonden.
Opmaak van het attribuut SuppressMessageAttribute
Het SuppressMessageAttribute kenmerk heeft de volgende indeling:
[Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")]
De eigenschappen van het kenmerk zijn onder andere:
Category: De categorie van de regel. Zie Codekwaliteitsregels voor meer informatie over regelcategorieën voor codeanalyse.CheckId:De id van de regel. Ondersteuning omvat zowel een korte als een lange naam voor de regelidentifier. De korte naam isCAXXXX; de lange naam isCAXXXX:FriendlyTypeName.Justification: De tekst die wordt gebruikt om de reden voor het onderdrukken van het bericht te documenteren.MessageId: De unieke identificatie van het probleem voor elk bericht.Scope: Het doel waarop de waarschuwing wordt onderdrukt. Als het doel niet is opgegeven, wordt het door het systeem ingesteld op het doel van het kenmerk. Ondersteunde bereiken zijn onder andere:module: Dit bereik onderdrukt waarschuwingen binnen een assembly. Het is een wereldwijde onderdrukking die van toepassing is op het hele project.resource: (alleen verouderde analyse) Dit bereik onderdrukt waarschuwingen in diagnostische informatie die zijn geschreven naar resourcebestanden die deel van de module (assembly) uitmaken. Dit bereik wordt in C#/VB-compilers niet gelezen of gerespecteerd bij Roslyn-analyzerdiagnostiek, die alleen bronbestanden analyseren.type: Dit bereik onderdrukt waarschuwingen tegen een type.member: Dit bereik onderdrukt waarschuwingen tegen een lid.namespace: Dit bereik onderdrukt waarschuwingen voor de naamruimte zelf. Waarschuwingen voor typen in de naamruimte worden niet onderdrukt.namespaceanddescendants: (Vereist compilerversie 3.x of hoger en Visual Studio 2019 of hoger) Dit bereik onderdrukt waarschuwingen in een naamruimte en alle onderliggende symbolen. Verouderde analyse negeert denamespaceanddescendantswaarde.
Target: Een id die het doel aangeeft waarop de waarschuwing wordt onderdrukt. Deze moet een volledig gekwalificeerde onderdeelnaam bevatten.
Wanneer u waarschuwingen ziet in Visual Studio, kunt u voorbeelden SuppressMessageAttribute bekijken door een onderdrukking toe te voegen aan het globale onderdrukkingsbestand. Het onderdrukkingskenmerk en de vereiste eigenschappen worden weergegeven in een voorbeeldvenster.
Gebruik van SuppressMessageAttribute
Waarschuwingen voor codeanalyse worden onderdrukt op het niveau waarop het SuppressMessageAttribute kenmerk wordt toegepast. Het kenmerk kan bijvoorbeeld worden toegepast op het assembly-, module-, type-, lid- of parameterniveau. Het doel van het toepassen van dit kenmerk is het strikt koppelen van de onderdrukkingsinformatie aan de code waar de schending optreedt.
De algemene vorm van onderdrukking omvat de regelcategorie en een regel-id, die een optionele leesbare weergave van de regelnaam bevat. Voorbeeld:
[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]
Als er strikte prestatieoverwegingen zijn voor het minimaliseren van in-bron onderdrukkingsmetagegevens, kan de regelnaam worden weggelaten. De regelcategorie en de bijbehorende regel-id vormen samen een voldoende unieke regel-id. Voorbeeld:
[SuppressMessage("Microsoft.Design", "CA1039")]
Om onderhoudbaarheidsredenen wordt het weglaten van de regelnaam niet aanbevolen.
Selectieve schendingen in een methodetekst onderdrukken (alleen verouderde analyse)
Onderdrukkingskenmerken kunnen worden toegepast op een methode, maar kunnen niet worden ingesloten in een hoofdtekst van de methode. Alle schendingen van een bepaalde regel worden onderdrukt als u het SuppressMessageAttribute kenmerk aan de methode toevoegt.
In sommige gevallen wilt u mogelijk een bepaald exemplaar van de schending onderdrukken. Bekijk het voorbeeld waarin toekomstige code niet automatisch wordt uitgesloten van de codeanalyseregel. Met bepaalde regels voor codeanalyse kunt u een bepaald exemplaar van de schending onderdrukken met behulp van de MessageId eigenschap van het SuppressMessageAttribute kenmerk. In het algemeen respecteren verouderde regels voor schendingen van een bepaald symbool (een lokale variabele of parameter) de MessageId eigenschap.
CA1500:VariableNamesShouldNotMatchFieldNames is een voorbeeld van een dergelijke regel. Verouderde regels voor schendingen van uitvoerbare code (niet-symbool) respecteren de MessageId eigenschap echter niet. Bovendien respecteren .NET Compiler Platform -analyses (Roslyn) de MessageId eigenschap niet.
Als u een bepaalde symboolschending van een regel wilt onderdrukken, geeft u de symboolnaam op voor de MessageId eigenschap van het SuppressMessageAttribute kenmerk. In het volgende voorbeeld ziet u code met twee schendingen van CA1500:VariableNamesShouldNotMatchFieldNames: één schending voor de name variabele en een andere schending voor de age variabele. Alleen de schending van het age symbool wordt onderdrukt.
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}");
}
}
Onderdrukkingen op globaal niveau
Het hulpprogramma voor analyse van beheerde code onderzoekt de SuppressMessageAttribute kenmerken die worden toegepast op het assembly-, module-, type-, lid- of parameterniveau. Het verzendt ook overtredingen tegen bronnen en naamruimte. Deze schendingen moeten op globaal niveau worden aangepakt en zijn zowel specifiek als gericht. Het volgende bericht onderdrukt bijvoorbeeld een schending van de naamruimte:
[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]
Voor onderdrukkingen op globaal niveau:
Wanneer u een waarschuwing onderdrukt met een
namespace-bereik, wordt de waarschuwing voor de naamruimte zelf onderdrukt. De waarschuwing voor typen in de naamruimte wordt niet onderdrukt.Targetbevat altijd de volledig gekwalificeerde itemnaam.Elke onderdrukking kan worden uitgedrukt door een expliciet bereik op te geven. Deze onderdrukkingen moeten op wereldwijd niveau bestaan. U kunt geen onderdrukking op lidniveau opgeven door een type te wijzigen.
Onderdrukkingen op globaal niveau zijn de enige manier om berichten te onderdrukken die verwijzen naar door compiler gegenereerde code die niet is toegewezen aan expliciet opgegeven gebruikersbron. De volgende code onderdrukt bijvoorbeeld een schending tegen een door een compiler verzonden constructor:
[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]
Globaal onderdrukkingsbestand
Het wereldwijde onderdrukkingsbestand onderhoudt onderdrukkingen die ofwel op wereldwijd niveau zijn of die geen doel specificeren. Onderdrukkingen voor schendingen op assemblyniveau worden bijvoorbeeld opgeslagen in dit bestand. Daarnaast worden sommige ASP.NET onderdrukkingen opgeslagen in dit bestand, omdat instellingen op projectniveau niet beschikbaar zijn voor code achter een formulier. Visual Studio maakt en voegt een globaal onderdrukkingsbestand toe aan uw project wanneer u voor het eerst de optie In projectonderdrukkingsbestand van de opdracht Onderdrukken selecteert in het venster Foutenlijst .
Bereik van moduleonderdrukking
U kunt schendingen van de codekwaliteit voor de hele assembly onderdrukken met behulp van de module scope.
Met het volgende kenmerk in uw GlobalSuppressions-projectbestand onderdrukt u bijvoorbeeld de schending van ConfigureAwait voor een ASP.NET Core-project:
[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")]
Gegenereerde code
Beheerde codecompilers en sommige externe hulpprogramma's genereren code om snelle codeontwikkeling te helpen. Door compiler gegenereerde code die wordt weergegeven in bronbestanden, wordt gemarkeerd met het GeneratedCodeAttribute kenmerk.
Voor broncodeanalyse kunt u berichten in gegenereerde code onderdrukken in een .editorconfig-bestand . Zie Gegenereerde code uitsluiten voor meer informatie.
Voor verouderde codeanalyse kunt u kiezen of u waarschuwingen en fouten voor codeanalyse voor gegenereerde code wilt onderdrukken. Zie Waarschuwingen voor codeanalyse onderdrukken voor gegenereerde code voor informatie over het onderdrukken van dergelijke waarschuwingen en fouten.
Opmerking
Codeanalyse negeert GeneratedCodeAttribute wanneer dit wordt toegepast op een hele assembly of een enkele parameter.