Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie beim Erstellen von Code mit Ihrem Team zusammenarbeiten, ist es häufig hilfreich, darauf hinzuweisen, dass eine Warnung nicht anwendbar ist. Das Unterdrücken von Codeanalyseverletzungen zeigt den Teammitgliedern, dass der Code überprüft wurde und die Warnung unterdrückt werden kann. In den folgenden Abschnitten werden die verschiedenen Methoden zum Unterdrücken von Codeanalyseverstößen mithilfe der Visual Studio-IDE beschrieben.
Unterdrücken von Verstößen mithilfe der EditorConfig-Datei
Fügen Sie in der EditorConfig-Datei für Ihre Lösung oder Ihr Projekt einen Eintrag für jede Regel hinzu, die Sie konfigurieren und den Schweregrad none
festlegen möchten. Beispiel: dotnet_diagnostic.CA1822.severity = none
. Weitere Informationen finden Sie unter Manuelles Konfigurieren des Regelschweregrads in einer EditorConfig-Datei. Informationen zum Hinzufügen einer EditorConfig-Datei finden Sie unter Hinzufügen einer EditorConfig-Datei zu einem Projekt.
Unterdrücken von Verstößen im Quellcode
Sie können Verstöße im Quellcode mithilfe einer Präprozessordirektive unterdrücken, die Verstöße für eine bestimmte Codezeile unterdrückt:
- C#: #pragma Warnung
- Visual Basic: Warnung deaktivieren
Sie können auch das SuppressMessageAttribute-Attribut verwenden, um eine Warnung in Ihrem C#- und Visual Basic-Code zu unterdrücken.
Unterdrücken von Verstößen mithilfe des Code-Editors
Führen Sie die folgenden Schritte aus, um Verstöße mithilfe des Code-Editors zu unterdrücken:
Platzieren Sie den Cursor in der Codezeile mit der Verletzung, und drücken Sie Strg+Punkt (.) oder Alt+Eingabetaste, um das Menü „Schnelle Aktionen“ zu öffnen.
Wählen Sie 'Unterdrücken oder Konfigurieren von Problemen'><, und wählen Sie dann entweder > oder 'in Quelle (Attribut)' aus.
Wenn Sie in "Quelle" auswählen, wird eine Vorschau der Präprozessordirektive angezeigt, die Ihrem Code hinzugefügt wurde.
Wenn Sie in Source (Attribut) auswählen, wird eine Vorschau des SuppressMessageAttribute-Attributs angezeigt, das Ihrem Code hinzugefügt wurde.
Unterdrücken von Verstößen mithilfe der Fehlerliste
Führen Sie die folgenden Schritte aus, um Verstöße mithilfe des Fensters "Fehlerliste " zu unterdrücken:
Wählen Sie im Fenster " Fehlerliste " die Regeln aus, die Sie unterdrücken möchten.
Klicken Sie mit der rechten Maustaste, und wählen Sie dann "In Quelle> aus.
Das Dialogfeld Änderungsvorschau wird geöffnet und zeigt eine Vorschau der C# #pragma-Warnungsdirektive oder Visual Basic #Disable-Warnungsdirektive an, die dem Quellcode hinzugefügt wurde.
Wählen Sie "Übernehmen" aus, um die Änderungen in Ihrer Codedatei zu speichern.
Diagnosen für den Fehlerlistenaufbau ausschließen
Wenn die Menüoption "Unterdrücken" im Fenster Fehlerliste nicht angezeigt wird, stammt der Fehler wahrscheinlich aus einer Erstellung und nicht aus einer Live-Analyse. Im Fenster " Fehlerliste " werden Diagnose- oder Regelverstöße sowohl aus der Livecodeanalyse als auch aus Builds angezeigt. Da die Builddiagnose veraltet sein kann, z. B. wenn Sie den Code bearbeitet haben, um den Verstoß zu beheben, aber nicht neu erstellt haben, können Sie diese Diagnose nicht immer aus der Fehlerliste unterdrücken.
Diagnosen aus Liveanalyse oder IntelliSense sind immer up-to-Datum mit aktuellen Quellen und können immer aus der Fehlerliste unterdrückt werden. Führen Sie die folgenden Schritte aus, um die Builddiagnose aus Ihrer Auswahl auszuschließen:
Ändern Sie in der Dropdownliste für Quellenfilter der Fehlerliste die Auswahl von Build + IntelliSense zu Nur IntelliSense.
Wählen Sie die Diagnose aus, die Sie unterdrücken möchten, und fahren Sie wie zuvor beschrieben fort.
Unterdrücken von Verstößen mithilfe einer globalen Unterdrückungsdatei
Die globale Unterdrückungsdatei verwendet das SuppressMessageAttribute-Attribut , um Codeverletzungen zu unterdrücken.
Verwenden einer globalen Unterdrückungsdatei aus dem Code-Editor
Führen Sie die folgenden Schritte aus, um Verstöße mittels einer globalen Unterdrückungsdatei mithilfe des Code-Editors zu unterdrücken:
Platzieren Sie im Code-Editor den Cursor auf einer Codezeile mit einem Verstoß, und drücken Sie Strg+Punkt (.) oder Alt+Eingabetaste, um das Menü Schnellaktionen zu öffnen.
Wählen Sie "Regelnummer< unterdrücken" >und dann in "Unterdrückungsdatei" aus.
Visual Studio erstellt eine Registerkarte im Code-Editor, die die neue globale Unterdrückungsdatei enthält.
Verwenden Sie eine globale Unterdrückungsdatei von der Fehlerliste
Führen Sie die folgenden Schritte aus, um Verstöße mit einer globalen Unterdrückungsdatei mithilfe des Fensters Fehlerliste zu unterdrücken:
Wählen Sie im Fenster " Fehlerliste " die Regeln aus, die Sie unterdrücken möchten.
Klicken Sie mit der rechten Maustaste, und wählen Sie dann Unterdrücken>In Unterdrückungsdatei aus.
Das Dialogfeld "Vorschau der Änderungen" wird geöffnet und zeigt eine Vorschau des Attributs an, das SuppressMessageAttribute der globalen Unterdrückungsdatei hinzugefügt wurde.
Wählen Sie Speichern aus, um die globale Unterdrückungsdatei zu sichern.
Alle aktuellen Verstöße unterdrücken
Das Unterdrücken aller aktuellen Verstöße wird manchmal als Baselining bezeichnet. Führen Sie die folgenden Schritte aus, um alle aktuellen Verstöße in einer Lösung oder einem Projekt zu unterdrücken:
Wählen Sie in der Visual Studio-Menüleiste "Build analysieren>" und "Aktive Probleme unterdrücken" aus.
Wählen Sie "Zur Lösung" aus, um Verstöße für die gesamte Lösung zu unterdrücken, oder wählen Sie "Für Projektname<" > aus, um Verstöße nur für Ihr Projekt zu unterdrücken.
Unterdrücken von Verstößen mithilfe von Projekteinstellungen
Führen Sie die folgenden Schritte aus, um Verstöße mithilfe der Projekteinstellungen des Projektmappen-Explorers zu unterdrücken:
Wählen Sie im Projektmappen-Explorer Ihr Projekt aus.
Klicken Sie mit der rechten Maustaste, und wählen Sie dann "Eigenschaften" aus (oder drücken Sie ALT+EINGABETASTE).
Öffnen Sie im Eigenschaften-Fenster den Bereich Codeanalyse im linken Fenster, und deaktivieren Sie dann Ergebnisse aus generiertem Code unterdrücken.
Unterdrücken von Verstößen mithilfe eines Regelsatzes
Deaktivieren Sie im Regelsatz-Editor das Kontrollkästchen neben dem Namen, oder legen Sie "Aktion" auf "Keine" fest.
In-Source-Unterdrückung und das SuppressMessageAttribute-Attribut
Die Quellunterdrückung (ISS) verwendet das SuppressMessageAttribute-Attribut, um eine Warnung zu unterdrücken. Sie können das SuppressMessageAttribute
Attribut der Quelldatei in der Nähe des Codesegments hinzufügen, das die Warnung generiert hat.
Sie können das Attribut entweder manuell im Code-Editor eingeben oder das Attribut automatisch wie folgt hinzufügen:
Platzieren Sie im Code-Editor den Cursor auf einer Codezeile mit einem Verstoß, und drücken Sie Strg+Punkt (.) oder Alt+Eingabetaste, um das Menü Schnellaktionen zu öffnen.
Wählen Sie "Probleme unterdrücken oder konfigurieren>Regelnummer <unterdrücken>" aus dem Menü "Schnelle Aktionen" aus.
Führen Sie einen der folgenden Schritte aus:
Wählen Sie in Quelle (Attribut) aus.
Visual Studio fügt Ihrem Code ein
SuppressMessageAttribute
Attribut hinzu.Wählen Sie in "Unterdrückungsdatei" aus.
Visual Studio erstellt eine Registerkarte im Code-Editor, die eine neue globale Unterdrückungsdatei mit
SuppressMessageAttribute
Attributen enthält.
Das SuppressMessageAttribute
Attribut ist ein bedingtes Attribut, das in den Metadaten der Assembly mit verwaltetem Code enthalten ist. Dieses Attribut ist nur enthalten, wenn das CODE_ANALYSIS
Kompilierungssymbol zur Kompilierungszeit definiert ist.
Verwenden Sie nur in C++ und CLI-Code die Makros CA_SUPPRESS_MESSAGE
oder CA_GLOBAL_SUPPRESS_MESSAGE
in der Headerdatei, um das Attribut hinzuzufügen.
Wenn Sie ein Projekt zur neuesten Version von Visual Studio migrieren, wird möglicherweise eine große Anzahl von Codeanalysewarnungen angezeigt. Wenn Sie nicht bereit sind, die Warnungen zu beheben, können Sie alle unterdrücken, indem Sie "Build analysieren>" und "Aktive Probleme unterdrücken" auswählen.
Hinweis
Verwenden Sie bei Releasebuilds keine In-Source-Unterdrückungen, um ein versehentliches Bereitstellen der In-Source-Unterdrückungs-Metadaten zu verhindern.
Format des SuppressMessageAttribute-Attributs
Das SuppressMessageAttribute
Attribut weist das folgende Format auf:
[Scope:SuppressMessage("Rule Category", "Rule Id", Justification = "Justification", MessageId = "MessageId", Scope = "Scope", Target = "Target")]
Die Eigenschaften des Attributs umfassen:
Category
: Die Kategorie der Regel. Weitere Informationen zu Codeanalyseregelkategorien finden Sie unter Codequalitätsregeln.CheckId:
Der Bezeichner der Regel. Die Unterstützung umfasst sowohl einen kurzen als auch einen langen Namen für den Regelbezeichner. Der Kurzname lautetCAXXXX
; der lange Name lautetCAXXXX:FriendlyTypeName
.Justification
: Der Text, der zum Dokumentieren des Grunds für die Unterdrückung der Nachricht verwendet wird.MessageId
: Der eindeutige Bezeichner des Problems für jede Nachricht.Scope
: Das Ziel, für das die Warnung unterdrückt wird. Wenn das Ziel nicht angegeben ist, setzt das System es auf das Ziel des Attributs. Zu den unterstützten Bereichen gehören:module
: Dieser Bereich unterdrückt Warnungen gegen eine Assembly. Es ist eine globale Unterdrückung, die für das gesamte Projekt gilt.resource
: (Nur Legacy FxCop) Dieser Bereich unterdrückt Warnungen in Diagnoseinformationen, die in Ressourcendateien geschrieben wurden, die Teil des Moduls (Assembly) sind. Dieser Bereich wird in C#/VB-Compilern für die Roslyn-Analysediagnose nicht gelesen oder berücksichtigt, die nur Quelldateien analysieren.type
: Dieser Gültigkeitsbereich unterdrückt Warnungen für einen Typ.member
: Dieser Bereich unterdrückt Warnungen gegenüber einem Mitglied.namespace
: Dieser Bereich unterdrückt Warnungen gegen den Namespace selbst. Warnungen gegen Typen innerhalb des Namespaces werden nicht unterdrückt.namespaceanddescendants
: (Erfordert Compilerversion 3.x oder höher und Visual Studio 2019 oder höher) Dieser Bereich unterdrückt Warnungen in einem Namespace und alle untergeordneten Symbole. Legacyanalyse ignoriert dennamespaceanddescendants
Wert.
Target
: Ein Bezeichner, der das Ziel angibt, für das die Warnung unterdrückt wird. Er muss einen vollqualifizierten Komponentennamen enthalten.
Wenn Warnungen in Visual Studio angezeigt werden, können Sie zu Beispiele SuppressMessageAttribute
anzeigen, indem Sie eine Unterdrückung zur globalen Unterdrückungsdatei hinzufügen. Das Unterdrückungsattribut und die erforderlichen Eigenschaften werden in einem Vorschaufenster angezeigt.
SuppressMessageAttribute-Verwendung
Codeanalysewarnungen werden auf der Ebene unterdrückt, auf die das SuppressMessageAttribute Attribut angewendet wird. Das Attribut kann beispielsweise auf Assembly-, Modul-, Typ-, Member- oder Parameterebene angewendet werden. Der Zweck der Anwendung dieses Attributs besteht darin, die Unterdrückungsinformationen eng mit dem Code zu koppeln, in dem die Verletzung auftritt.
Die allgemeine Form der Unterdrückung umfasst die Regelkategorie und einen Regelbezeichner, der eine optionale lesbare Darstellung des Regelnamens enthält. Beispiel:
[SuppressMessage("Microsoft.Design", "CA1039:ListsAreStrongTyped")]
Wenn es strenge Leistungsgründe für die Minimierung von Metadaten für die In-Source-Unterdrückung gibt, kann der Regelname weggelassen werden. Die Regelkategorie und ihre Regel-ID bilden zusammen einen hinreichend eindeutigen Regelbezeichner. Beispiel:
[SuppressMessage("Microsoft.Design", "CA1039")]
Aus Wartungsgründen wird das Weglassen des Regelnamens nicht empfohlen.
Selektive Verstöße innerhalb eines Methodenkörpers unterdrücken
Unterdrückungsattribute können auf eine Methode angewendet werden, können aber nicht in einen Methodentext eingebettet werden. Alle Verstöße gegen eine bestimmte Regel werden unterdrückt, wenn Sie das SuppressMessageAttribute Attribut zur Methode hinzufügen.
In einigen Fällen möchten Sie möglicherweise einen bestimmten Fall der Verletzung unterdrücken. Betrachten Sie das Beispiel, in dem zukünftiger Code nicht automatisch von der Codeanalyseregel ausgenommen wird. Mit bestimmten Codeanalyseregeln können Sie eine bestimmte Instanz des Verstoßes mithilfe der MessageId
Eigenschaft des SuppressMessageAttribute
Attributs unterdrücken. Im Allgemeinen beachten Legacyregeln für Verstöße gegen ein bestimmtes Symbol (eine lokale Variable oder einen Parameter) die MessageId
Eigenschaft.
CA1500:VariableNamesShouldNotMatchFieldNames ist ein Beispiel für eine solche Regel. Althergebrachte Regeln für Verstöße gegen ausführbaren Code (nicht-Symbol) respektieren die MessageId
Eigenschaft nicht. Außerdem respektieren .NET Compiler Platform ("Roslyn") Analyzer die MessageId
Eigenschaft nicht.
Um eine bestimmte Symbolverletzung einer Regel zu unterdrücken, geben Sie den Symbolnamen für die MessageId
Eigenschaft des SuppressMessageAttribute
Attributs an. Das folgende Beispiel zeigt Code mit zwei Verletzungen von CA1500:VariableNamesShouldNotMatchFieldNames: eine Verletzung für die name
Variable und eine andere Verletzung für die age
Variable. Nur der Verstoß für das age
Symbol wird unterdrückt.
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}");
}
}
Unterdrückung auf globaler Ebene
Das Analysetool für verwalteten Code untersucht die SuppressMessageAttribute
Attribute, die auf Assembly-, Modul-, Typ-, Member- oder Parameterebene angewendet werden. Außerdem werden Verstöße gegen Ressourcen und Namespaces gemeldet. Diese Verstöße müssen auf globaler Ebene angewendet werden und gezielt sein. Die folgende Meldung unterdrückt beispielsweise eine Namespaceverletzung:
[module: SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "MyNamespace")]
Für Unterdrückungen auf globaler Ebene:
Wenn Sie eine Warnung mit einem
namespace
Bereich unterdrücken, wird die Warnung gegen den Namespace selbst unterdrückt. Die Warnung gegen Typen innerhalb des Namespaces wird nicht unterdrückt.Target
enthält immer den vollqualifizierten Objektnamen.Jede Unterdrückung kann durch Angabe eines expliziten Bereichs ausgedrückt werden. Diese Unterdrückungen müssen auf globaler Ebene bestehen. Sie können die Unterdrückung auf Memberebene nicht definieren, indem Sie einen Typ ändern.
Unterdrückungen auf globaler Ebene sind die einzige Möglichkeit, Nachrichten zu unterdrücken, die auf vom Compiler generierten Code verweisen, der nicht explizit bereitgestellten Benutzerquelle zugeordnet ist. Der folgende Code unterdrückt beispielsweise einen Verstoß gegen einen vom Compiler ausgegebenen Konstruktor:
[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]
Globale Unterdrückungsdatei
Die globale Unterdrückungsdatei führt Unterdrückungen auf, die entweder auf globaler Ebene sind oder kein spezifisches Ziel angeben. Beispielsweise werden Unterdrückungen für Verstöße auf Assemblyebene in dieser Datei gespeichert. Darüber hinaus werden einige ASP.NET-Unterdrückungen in dieser Datei gespeichert, da Einstellungen auf Projektebene für Code im Hintergrund eines Formulars nicht verfügbar sind. Visual Studio erstellt und fügt Ihrem Projekt eine globale Unterdrückungsdatei hinzu, wenn Sie zum ersten Mal die Option In Projektunterdrückungsdatei im Fehlerliste-Fenster des Befehls Unterdrücken auswählen.
Modul-Ausschaltungsbereich
Sie können Codequalitätsverletzungen für die gesamte Assembly mithilfe des module
Anwendungsbereichs unterdrücken.
Das folgende Attribut in Ihrer GlobalSuppressions-Projektdatei unterdrückt beispielsweise die ConfigureAwait-Verletzung für ein 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")]
Generierter Code
Verwaltete Codecompiler und einige externe Tools generieren Code, um die schnelle Codeentwicklung zu erleichtern. Compilergenerierter Code, der in Quelldateien angezeigt wird, wird mit dem GeneratedCodeAttribute
Attribut gekennzeichnet.
Bei der Quellcodeanalyse können Sie Nachrichten in generierten Code in einer EDITORCONFIG-Datei unterdrücken. Weitere Informationen finden Sie unter Ausschließen von generierten Code.
Bei der Analyse von Legacy-Code können Sie auswählen, ob Codeanalysewarnungen und Fehler bei generiertem Code unterdrückt werden sollen. Informationen zum Unterdrücken solcher Warnungen und Fehler finden Sie unter Unterdrücken von Codeanalysewarnungen für generierten Code.
Hinweis
Die Codeanalyse ignoriert GeneratedCodeAttribute
, wenn sie entweder auf eine gesamte Assembly oder einen einzelnen Parameter angewendet wird.