Unterdrücken von Compilerwarnungen

Mit Visual Studio können Sie angeben, welche Warnungen unterdrückt werden sollen. Dazu geben Sie die Warnungscodes im Projekt-Designer (Projekteigenschaftenseiten) an. Sie können Warnungen auch unterdrücken, indem Sie bestimmte Eigenschaften direkt in der Projektdatei, über die Befehlszeile oder im Code festlegen, wenn Sie eine Warnung nur an einem Ort unterdrücken möchten.

Einige Compiler und Buildtools verfügen auch über Optionen zum Angeben der Warnstufe. Auf diese Weise können Sie Warnungskategorien mit einer Einstellung steuern. Informationen zu diesen Optionen finden Sie in der Dokumentation für die spezifische Sprache und den verwendeten Compiler:

Wenn Sie eine präzisere und zielgerichtetere Ausgabe in Ihrem Buildprotokoll sehen möchten, sollten Sie die Ausführlichkeit des Buildprotokolls ändern. Die verfügbaren Einstellungen sind Normal, Detailliert und Diagnose. Weitere Informationen zur Ausführlichkeit erhalten Sie im Artikel Vorgehensweise: Anzeigen, Speichern und Konfigurieren von Buildprotokolldateien.

Achtung

Beachten Sie, dass Warnungen als Hinweis auf ein potenzielles Problem mit Ihrem Code dienen sollen. Daher sollten Sie die Risiken beim Deaktivieren einer bestimmten Warnung verstehen. Visual Studio-Einstellungen deaktivieren Warnungen auf Projektebene. Möglicherweise möchten Sie einen gezielteren Ansatz zum Deaktivieren von Warnungen verwenden, als Visual Studio bereitstellt. Die meisten Compiler bieten Möglichkeiten, Warnungen nur für bestimmte Codezeilen zu deaktivieren, sodass Sie die Warnungen weiterhin überprüfen können, wenn sie an anderen Stellen im selben Projekt auftreten.

Unterdrücken bestimmter Warnungen für Visual C# oder F#

Verwenden Sie die Build-Eigenschaften, um bestimmte Warnungen für ein ganzes C#- oder F#-Projekt zu unterdrücken. Wenn Sie eine Warnung nur in einem bestimmten Teil des Codes in C# unterdrücken möchten, verwenden Sie #pragma-Warnungen. Verwenden Sie für F# die Präprozessoranweisung #nowarn, um eine Warnung für eine gesamte Quelldatei zu deaktivieren.

  1. Wählen Sie im Projektmappen-Explorer das Projekt aus, in dem Sie Warnungen unterdrücken möchten.

  2. Klicken Sie mit der rechten Maustaste auf den Projektknoten, und wählen Sie im Kontextmenü Eigenschaften aus. Alternativ können Sie den Projektknoten auswählen und ALT+EINGABETASTE drücken.

  3. Wählen Sie Erstellen aus, und wechseln Sie zum Unterabschnitt Fehler und Warnungen.

  4. Geben Sie im Feld Warnungen unterdrücken oder Bestimmte Warnungen unterdrücken die Fehlercodes der Warnungen an, die unterdrückt werden sollen (durch Semikolons getrennt). Eine Liste und Beschreibungen der Warnungscodes finden Sie unter C#-Compilermeldungen.

  5. Generieren Sie die Projektmappe neu.

  1. Wählen Sie im Projektmappen-Explorer das Projekt aus, in dem Sie Warnungen unterdrücken möchten.

  2. Klicken Sie mit der rechten Maustaste auf den Projektknoten, und wählen Sie im Kontextmenü Eigenschaften aus. Alternativ können Sie den Projektknoten auswählen und ALT+EINGABETASTE drücken.

  3. Wählen Sie die Seite oder den Abschnitt Erstellen aus, und öffnen Sie bei Verwendung der aktuellen Benutzeroberfläche den Unterabschnitt Fehler und Warnungen.

  4. Geben Sie im Feld Warnungen unterdrücken oder Bestimmte Warnungen unterdrücken die Fehlercodes der Warnungen an, die unterdrückt werden sollen (durch Semikolons getrennt). Eine Liste und Beschreibungen der Warnungscodes finden Sie unter C#-Compilermeldungen.

  5. Generieren Sie die Projektmappe neu.

Hinweis

Einige Warnungen können nicht unterdrückt werden. Eine Liste dieser Warnungen finden Sie in der Beschreibung der NoWarn-Compileroption.

Unterdrücken bestimmter Warnungen für C++

In einem C++-Projekt können Sie Warnungen mithilfe der Projekteigenschaften unterdrücken. Sie verwenden die Eigenschaftenseite Konfigurationseigenschaften, um bestimmte Warnungen für ein ganzes C++-Projekt zu unterdrücken. Sie können Warnungen auch mithilfe von #pragma warning in bestimmten Dateien unterdrücken. In diesem Artikel wird die Kontrolle auf Projektebene behandelt. Wenn Sie jedoch beabsichtigen, eine Warnung in einer bestimmten Datei oder nur um einige Codezeilen herum zu deaktivieren, aber andere Vorkommen derselben Warnung weiterhin sehen möchten, sollten Sie die Verwendung von #pragma warning in Betracht ziehen. Weitere Informationen finden Sie unter #pragma-Warnung.

  1. Wählen Sie im Projektmappen-Explorer das Projekt oder die Quelldatei aus, für das bzw. die Sie Warnungen unterdrücken möchten.

  2. Wählen Sie in der Menüleiste Ansicht>Eigenschaftenseiten aus.

  3. Wählen Sie die Kategorie Konfigurationseigenschaften aus, wählen Sie die Kategorie C/C++ und dann die Seite Erweitert aus.

  4. Führen Sie einen der folgenden Schritte aus:

    • Geben Sie im Feld Bestimmte Warnungen deaktivieren die Fehlercodes der Warnungen an, die Sie unterdrücken möchten, durch Semikola getrennt.

    • Wählen Sie im Feld Bestimmte Warnungen deaktivieren den Befehl Bearbeiten aus, um weitere Optionen anzuzeigen.

  5. Wählen Sie die Schaltfläche OK aus, und erstellen Sie die Projektmappe dann erneut.

Wenn die Warnung von einem anderen Tool stammt, lesen Sie die Dokumentation für das jeweilige Tool, um herauszufinden, wie Sie dort Warnungen unterdrücken können. Beispielsweise enthält der C++-Linker einige Warnungen, die Sie mithilfe der Linkeroption /IGNORE deaktivieren können. Weitere Informationen finden Sie unter /IGNORE (Bestimmte Warnungen ignorieren), und Informationen zum Festlegen dieser Option finden Sie unter /link (Optionen an Linker übergeben).

Unterdrücken von Warnungen für Visual Basic

Sie können bestimmte Compilerwarnungen für Visual Basic unterdrücken, indem Sie die VBPROJ-Datei für das Projekt bearbeiten. Um Warnungen nach Kategorie zu unterdrücken, können Sie die Seite Compilereigenschaften verwenden. Wenn Sie eine Warnung in einem bestimmten Teil einer Codedatei deaktivieren möchten, verwenden Sie #Disable- und #Enable-Anweisungen. Weitere Informationen finden Sie unter Konfigurieren von Warnungen in Visual Basic.

So unterdrücken Sie bestimmte Warnungen für an ganzes Visual Basic-Projekt

In diesem Beispiel wird gezeigt, wie Sie die VBPROJ-Datei zum Unterdrücken bestimmter Compilerwarnungen bearbeiten.

  1. Wählen Sie im Projektmappen-Explorer das Projekt aus, in dem Sie Warnungen unterdrücken möchten.

  2. Wählen Sie in der Menüleiste Projekt>Projekt entladen aus.

  3. Öffnen Sie im Projektmappen-Explorer per Rechtsklick das Kontextmenü für das Projekt, und wählen Sie dann <Projektname>.vbproj bearbeiten aus.

    Die XML-Projektdatei wird im Code-Editor geöffnet.

  4. Suchen Sie nach dem <NoWarn>-Element für die Buildkonfiguration, mit der Sie arbeiten, und fügen Sie eine oder mehrere Warnungsnummern als Wert des <NoWarn>-Elements hinzu. Wenn Sie mehrere Warnungsnummern angeben, trennen Sie diese durch Kommas.

    Das folgende Beispiel zeigt das Element <NoWarn> für die Debug-Buildkonfiguration auf einer x86-Plattform, bei der zwei Compilerwarnungen unterdrückt sind:

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
        <PlatformTarget>x86</PlatformTarget>
        <DebugSymbols>true</DebugSymbols>
        <DebugType>full</DebugType>
        <Optimize>false</Optimize>
        <OutputPath>bin\Debug\</OutputPath>
        <DefineDebug>true</DefineDebug>
        <DefineTrace>true</DefineTrace>
        <ErrorReport>prompt</ErrorReport>
        <NoWarn>40059,42024</NoWarn>
        <WarningLevel>1</WarningLevel>
      </PropertyGroup>
    

    Hinweis

    .NET Core-Projekte enthalten standardmäßig keine Eigenschaftengruppen für die Buildkonfiguration. Um Warnungen in einem .NET Core-Projekt zu unterdrücken, fügen sie der Datei den Abschnitt für die Buildkonfiguration manuell hinzu. Zum Beispiel:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp2.0</TargetFramework>
        <RootNamespace>VBDotNetCore_1</RootNamespace>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <NoWarn>42016,41999,42017</NoWarn>
      </PropertyGroup>
    </Project>
    
  5. Speichern Sie die Änderungen an der VBPROJ-Datei.

  6. Wählen Sie in der Menüleiste Projekt>Projekt erneut laden aus.

  7. Wählen Sie in der Menüleiste Erstellen>Projektmappe neu erstellen aus.

    Das Fenster Ausgabe zeigt die von Ihnen angegebenen Warnungen jetzt nicht mehr an.

Weitere Informationen finden Sie im Abschnitt zur Compileroption /nowarn für den Visual Basic-Befehlszeilencompiler.

Unterdrücken einer Warnung durch Bearbeiten der Projektdatei

Die Verwendung des Eigenschaften-Designers von Visual Studio zum Unterdrücken von Warnungen führt zu einer Änderung an der Projektdatei. Manchmal kann es praktischer sein, die Projektdatei manuell zu bearbeiten, um eine Warnung zu deaktivieren. Die Projektdatei wird von MSBuild verarbeitet, der Microsoft-Build-Engine. Weitere Informationen finden Sie unter MSBuild.

Außerdem können in Visual Studio 2019 bis Version 16.7 einige Warnungen von anderen Tools als dem Compiler nicht auf andere Weise unterdrückt werden.

  1. Um die Projektdatei im Visual Studio-Editor zu öffnen, klicken Sie mit der rechten Maustaste auf den Projektknoten, und wählen Sie Projektdatei bearbeiten aus. Bei einigen Projektarten müssen Sie das Projekt entladen, bevor Sie die Projektdatei bearbeiten können. Klicken Sie dazu mit der rechten Maustaste auf den Projektknoten, und wählen Sie Projekt entladen aus.

  2. Verwenden Sie in einem neuen PropertyGroup-Abschnitt die NoWarn-Eigenschaft. Listen Sie die zu unterdrückenden Fehler durch Kommas oder Semikolons getrennt auf. Bei Compilerwarnungen können Sie den Sprachcode weglassen und nur die Zahl eingeben, es wird jedoch aus Gründen der Klarheit empfohlen, den vollständigen Code zu verwenden. Geben Sie für Warnungen von anderen Tools im Build den vollständigen Code an, einschließlich des Präfixes (z. B. MSB für Warnungen, die von MSBuild selbst ausgegeben werden).

    Der folgende Code fügt der Liste der unterdrückten Warnungen die Warnungen CS0028 und CS0618 hinzu:

    <PropertyGroup>
       // Other properties
       <NoWarn>$(NoWarn);CS0028;CS0618</NoWarn>
    </PropertyGroup>
    

    Durch Verweisen auf den vorherigen Wert von $(NoWarn), wie im vorherigen Beispiel gezeigt, werden diese Zahlen zuvor festgelegten Werten für NoWarn hinzugefügt, anstatt diese zu überschreiben.

Weitere Informationen finden Sie unter NoWarn.

Unterdrücken einer Warnung aus der Buildbefehlszeile

Wenn Sie ein Projekt über die Befehlszeile erstellen, können Sie Warnungen auch mithilfe von -warnAsMessage in der MSBuild-Befehlszeile unterdrücken. Verwenden Sie um Listen mit mehreren Warncodes Anführungszeichen.

MSBuild.exe -warnAsMessage="CS0028;CS0618" MyProject.csproj

Hilfreiche Informationen finden Sie in der MSBuild-Befehlszeilenreferenz.

Unterdrücken von Toolwarnungen

Wie Sie Warnungen von anderen Tools als dem Compiler unterdrücken, z. B. von MSBuild, ist vom Projekttyp und der verwendeten Version von MSBuild abhängig.

Bei MSBuild 16.8 und höher können Sie in Projekten, die ein SDK oder die Standardimporte verwenden, Toolwarnungen über die zuvor beschriebenen Methoden unterdrücken. Sie müssen den vollständigen Fehlercode (einschließlich des Präfixes wie etwa MSB für MSBuild) angeben, nicht nur eine Zahl wie bei einer Compilerwarnung. Die Nachricht wird außerdem nicht beseitigt: Sie wird weiterhin als Informationsmeldung angezeigt, wurde jedoch von einer Warnung herabgestuft.

Bei MSBuild 16.7 und früheren Versionen sowie in allen Projekten, die kein SDK oder Standardimporte verwenden, werden diese Warnungen mit NoWarn nicht unterdrückt. In solchen Fällen lautet die Eigenschaft, mit der Sie Toolwarnungen unterdrücken können, MSBuildWarningsAsMessages. Sie können Buildwarnungen unterdrücken, indem Sie die Projektdatei bearbeiten oder die Option MSBuildWarningsAsMessages in der MSBuild-Befehlszeile angeben. Wenn Sie MSBuildWarningsAsMessages verwenden, geben Sie den vollständigen MSBuild-Fehlercode an, einschließlich des Präfixes MSB.

<PropertyGroup>
    <MSBuildWarningsAsMessages>$(MSBuildWarningsAsMessages);MSB3270</MSBuildWarningsAsMessages>
</PropertyGroup>

Beachten Sie, dass einige MSBuild-Warnungen nicht durch Festlegen von MSBuildWarningsAsMessages unterdrückt werden können. Um diese zu deaktivieren, verwenden Sie die Befehlszeilenoption warnAsMessage.

Außerdem weisen einige Warnungen bestimmte Eigenschaften zum Deaktivieren der Warnung auf. Beispielsweise wird MSB3253 durch Festlegen dieser Eigenschaft deaktiviert:

 <PropertyGroup>
    <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
        None
    </ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
  </PropertyGroup>

Verwenden Sie nach Möglichkeit die explizitere Eigenschaft, da ein Fehlercode an sich nicht so einfach zu verstehen ist. Die Fehlerreferenzseite für den Code enthält in der Regel die zum Deaktivieren verwendete Eigenschaft.

Unterdrücken von Warnungen für NuGet-Pakete

In einigen Fällen möchten Sie möglicherweise NuGet-Compilerwarnungen nicht für ein gesamtes Projekt, sondern nur für ein einzelnes NuGet-Paket unterdrücken. Diese Warnungen erfüllen einen Zweck, deshalb sollten sie nicht auf Projektebene unterdrückt werden. Beispielsweise könnten Sie in einer der NuGet-Warnungen darüber informiert werden, dass das Paket nicht vollständig mit Ihrem Projekt kompatibel ist. Wenn Sie die Warnung auf Projektebene unterdrücken und später ein weiteres NuGet-Paket hinzufügen, wissen Sie nie, ob die Kompatibilitätswarnung von diesem Paket ausgelöst wurde.

So unterdrücken Sie eine bestimmte Warnung für ein einzelnes NuGet-Paket

  1. Wählen Sie im Projektmappen-Explorer das NuGet-Paket aus, für das Sie Compilerwarnungen unterdrücken möchten.

    Screenshot of NuGet package in Solution Explorer.

    Screenshot of NuGet package in Solution Explorer.

  2. Wählen Sie im Kontextmenü (Rechtsklick) Eigenschaften aus.

  3. Geben Sie in den Paketeigenschaften im Feld Warnungen unterdrücken die Warnungsnummer ein, die Sie für dieses Paket unterdrücken möchten. Wenn Sie mehr als eine Warnung unterdrücken möchten, verwenden Sie ein Komma zum Trennen der Warnungsnummern.

    NuGet package properties

    Screenshot of NuGet package properties

    Die Warnung wird im Projektmappen-Explorer und in der Fehlerliste nicht mehr angezeigt. In der Projektdatei ist die NoWarn-Eigenschaft festgelegt.

     <PackageReference Include="NuGet.Build.Tasks.Pack" Version="6.2.0">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
       <NoWarn>NU5104</NoWarn>
     </PackageReference>