Unterdrücken von Codeanalysewarnungen

In diesem Artikel werden die verschiedenen Möglichkeiten erläutert, wie Warnungen der Codeanalyse unterdrückt werden können, wenn Sie Ihre .NET-App erstellen. Sie können Codequalitätsregeln, Codestilregeln und Analyseregeln von Drittanbietern mithilfe der hier bereitgestellten Informationen unterdrücken.

Tipp

Wenn Sie Visual Studio als Entwicklungsumgebung verwenden, können Sie über das Glühbirnenmenü die Optionen anzeigen, die den Code zum Unterdrücken von Warnungen generieren. Weitere Informationen finden Sie unter Unterdrücken von Verstößen.

Deaktivieren der Regel

Sie können eine Regel deaktivieren, die eine Warnung verursacht, indem Sie ihren Schweregrad in einer EditorConfig- oder AnalyzerConfig-Konfigurationsdatei auf none setzen. Mit dieser Aktion wird die Regel für Ihre gesamte Datei oder Ihr gesamtes Projekt deaktiviert, abhängig vom Umfang der Konfigurationsdatei, die Sie verwenden.

[*.{cs,vb}]
dotnet_diagnostic.<rule-ID>.severity = none

Weitere Informationen zu den Schweregraden von Regeln finden Sie unter Konfigurieren des Regelschweregrads.

Verwenden einer Präprozessoranweisung

Verwenden Sie eine Anweisung des Typs #pragma warning (C#) oder Disable (Visual Basic), um die Warnung nur für eine bestimmte Codezeile zu unterdrücken.

    try { ... }
    catch (Exception e)
    {
#pragma warning disable CA2200 // Rethrow to preserve stack details
        throw e;
#pragma warning restore CA2200 // Rethrow to preserve stack details
    }
    Try
        ...
    Catch e As Exception
#Disable Warning CA2200 ' Rethrow to preserve stack details
        Throw e
#Enable Warning CA2200 ' Rethrow to preserve stack details
    End Try

Verwenden von SuppressMessageAttribute

Mit SuppressMessageAttribute kann eine Warnung in der Quelldatei oder in einer Datei mit den global geltenden Unterdrückungsregeln für ein ganzes Projekt unterdrückt werden (GlobalSuppressions.cs oder GlobalSuppressions.vb). Dieses Attribut bietet die Möglichkeit, eine Warnung nur in bestimmten Teilen des Projekts oder der Datei zu unterdrücken.

Die beiden erforderlichen Positionsparameter für das Attribut SuppressMessageAttribute sind die Kategorie der Regel und die Regel-ID. Im folgenden Codeausschnitt werden "Usage" und "CA2200:Rethrow to preserve stack details" für diese Parameter übergeben.

[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA2200:Rethrow to preserve stack details", Justification = "Not production code.")]
private static void IgnorableCharacters()
{
    try
    {
        ...
    }
    catch (Exception e)
    {
        throw e;
    }
}

Wenn Sie der Datei mit den global geltenden Unterdrückungsregeln das Attribut hinzufügen, bestimmen Sie die gewünschte Unterdrückungsebene, z. B. "member". Sie geben die API an, in der die Warnung mit der Eigenschaft Target unterdrückt werden soll.

[assembly: SuppressMessage("Usage", "CA2200:Rethrow to preserve stack details", Justification = "Not production code.", Scope = "member", Target = "~M:MyApp.Program.IgnorableCharacters")]

Verwenden Sie die Dokumentations-ID für die API, auf die Sie im Target-Attribut verweisen möchten. Informationen zu Dokumentations-IDs finden Sie unter Format der Dokumentations-ID.

Sie müssen das Unterdrückungsattribut in eine Datei mit globalen Unterdrückungsregeln einfügen, um Warnungen für vom Compiler generierten Code zu unterdrücken, der nicht explizit bereitgestellten Benutzerquellen zugeordnet ist. Der folgende Code unterdrückt z. B. einen Verstoß gegen einen vom Compiler ausgegebenen Konstruktor:

[module: SuppressMessage("Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="MyTools.Type..ctor()")]

Siehe auch