コンパイラ警告の非表示

Visual Studio では、プロジェクト デザイナー (プロジェクト プロパティ ページ) で警告コードを指定することで、抑制する警告を指定できます。 また、プロジェクト ファイル内、コマンド ライン経由、または 1 箇所でのみ警告を抑制する場合はコード内で、直接特定のプロパティを設定することにより、警告を抑制することもできます。

コンパイラやビルド ツールによっては、警告レベルを指定するオプションもあります。 これにより、1 つの設定で警告のカテゴリーを制御できます。 これらのオプションについては、使用している特定の言語とコンパイラに関する以下のドキュメントを参照してください。

ビルド ログの出力をより簡潔で焦点を絞ったものにする場合は、ビルド ログの詳細を変更する必要があります。 使用可能な設定は、[標準][詳細][診断] です。 詳細さについて詳しくは、「方法:ビルド ログ ファイルを表示、保存、および構成する」をご覧ください。

注意事項

警告は、コードに潜在的な問題があることを示すものであるため、特定の警告を無効にすることによるリスクを理解する必要があることに注意してください。 Visual Studio の設定により、プロジェクト レベルでの警告が無効になります。 警告を無効にするには、Visual Studio で提供されるものよりも対象を絞ったアプローチを使用する必要があります。 ほとんどのコンパイラには、特定のコード行のみ警告を無効にする方法が用意されており、同じプロジェクト内の他の場所で警告が発生した場合でも、その警告を確認できます。

Visual C# または F# の特定の警告を非表示にする

C# および F# プロジェクト全体の特定の警告を非表示にするには、[ビルド] プロパティを使用します。 C# でコードの特定の部分のみ警告を抑制する場合は、#pragma warning を使用します。 F# の場合、#nowarn プリプロセッサ ディレクティブを使用すると、ソース ファイル全体の警告を無効にできます。

  1. ソリューション エクスプローラーで、警告を抑制するプロジェクトを選びます。

  2. プロジェクト ノードを右クリックし、コンテキスト メニューの [プロパティ] を選択します。 または、プロジェクト ノードを選択し、Alt+Enter キーを押します。

  3. [ビルド] を選択し、[エラーと警告] サブセクションに移動します。

  4. [警告の表示なし] または [特定の警告を表示しない] ボックスで、表示しない警告のエラー コードをセミコロンで区切って指定します。 警告コードの一覧と説明については、C# コンパイラのメッセージに関する記事を参照してください。

  5. ソリューションをリビルドします。

  1. ソリューション エクスプローラーで、警告を抑制するプロジェクトを選びます。

  2. プロジェクト ノードを右クリックし、コンテキスト メニューの [プロパティ] を選択します。 または、プロジェクト ノードを選択し、Alt+Enter キーを押します。

  3. [ビルド] ページまたはセクションを選択し、現在の UI を使用している場合は、[エラーと警告] サブセクションを開きます。

  4. [警告の表示なし] または [特定の警告を表示しない] ボックスで、表示しない警告のエラー コードをセミコロンで区切って指定します。 警告コードの一覧と説明については、C# コンパイラのメッセージに関する記事を参照してください。

  5. ソリューションをリビルドします。

Note

一部の警告は抑制できません。 それらの一覧については、NoWarn コンパイラ オプションに関する記事を参照してください。

C++ の特定の警告を非表示にする

プロジェクト プロパティを使用することで、C++ プロジェクトの警告を抑制できます。その場合、[構成プロパティ] プロパティ ページを使用して、C++ プロジェクト全体の特定の警告を抑制します。 #pragma warning を使用することで、特定のファイルの警告を抑制することもできます。 この記事では、プロジェクト レベルの制御について説明します。特定のファイルや数行のコードで警告を無効にする意図があるものの、同じ警告の他の内容が発生することを引き続き確認する必要がある場合は、#pragma warning の使用を検討することをお勧めします。 #pragma warning を参照してください。

  1. ソリューション エクスプローラーで、警告を抑制するプロジェクトまたはソース ファイルを選びます。

  2. メニュー バーで [表示]>[プロパティ ページ] の順に選びます。

  3. [構成プロパティ] カテゴリを選び、[C/C++] カテゴリを選んだ後、[詳細設定] ページを選びます。

  4. 次のいずれかの操作を実行します。

    • [指定の警告を無効にする] ボックスで表示しない警告のエラー コードをセミコロンで区切って指定します。

    • [指定の警告を無効にする] ボックスで、[編集] を選んで他のオプションを表示します。

  5. [OK] ボタンを選び、ソリューションをリビルドします。

警告が他のツールによるものである場合、そのツールの警告を抑制する方法については、特定のツールのドキュメントを参照してください。 たとえば、C++ リンカーの中には、/IGNORE リンカー オプションを使用して無効にできる警告があります。 「/IGNORE (特定の警告を無視する)」を参照してください。また、このオプションを設定するには、「/link (リンカーにオプションを渡す)」を参照してください。

Visual Basic の警告を非表示にする

プロジェクトの .vbproj ファイルを編集することで、Visual Basic の特定のコンパイラの警告を非表示にできます。 カテゴリで警告を非表示にするには、コンパイル プロパティ ページを使用できます。 コード ファイルの特定の部分で警告を無効にする場合は、#Disable と #Enable ディレクティブを使用します。 詳細については、「Visual Basic での警告の構成」を参照してください。

Visual Basic プロジェクト全体の特定の警告を抑制するには

この例は、 .vbproj ファイルを編集して特定のコンパイラの警告を非表示にする方法を示しています。

  1. ソリューション エクスプローラーで、警告を抑制するプロジェクトを選びます。

  2. メニュー バーから、[プロジェクト]>[プロジェクトのアンロード] の順に選びます。

  3. ソリューション エクスプローラーで、プロジェクトの右クリックまたはショートカット メニューを開き、[<プロジェクト名>.vbproj の編集] を選びます。

    コード エディターに XML プロジェクト ファイルが開きます。

  4. ビルドに使用するビルド構成の <NoWarn> 要素を見つけ、<NoWarn> 要素の値として 1 つまたは複数の警告番号を追加します。 複数の警告番号を指定する場合は、コンマで区切ります。

    次の例では、2 つのコンパイラの警告が非表示にされた、x86 プラットフォームでのデバッグ ビルド構成の <NoWarn> 要素を太字で示してあります。

    <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>
    

    Note

    既定では、.NET Core プロジェクトにはビルド構成プロパティ グループは含まれません。 .NET Core プロジェクトで警告を非表示にするには、手動でビルド構成セクションをファイルに追加します。 たとえば次のような点です。

    <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. 変更を .vbproj ファイルに保存します。

  6. メニュー バーから、[プロジェクト]>[プロジェクトの再読み込み] の順に選びます。

  7. メニュー バーから、 [ビルド]>[ソリューションのリビルド] の順に選びます。

    指定した警告が、[出力] ウィンドウに表示されなくなります。

詳細については、Visual Basic のコマンド ライン コンパイラの /nowarn コンパイラ オプションを参照してください。

プロジェクト ファイルを編集して警告を抑制する

Visual Studio プロパティ デザイナーを使用して警告を抑制すると、プロジェクト ファイルが変更されます。 警告を無効にするには、プロジェクト ファイルを手作業で編集した方が便利な場合もあります。 プロジェクト ファイルは、Microsoft のビルド エンジンである MSBuild で処理されます。 MSBuild を参照してください。

また、Visual Studio 2019 バージョン 16.7 以前では、コンパイラ以外のツールから発生した警告を他の方法で抑制できない場合があります。

  1. Visual Studio エディターでプロジェクト ファイルを開くには、プロジェクト ノードを右クリックし、[プロジェクト ファイルの編集] を選択します。 一部のプロジェクト タイプでは、プロジェクト ファイルを編集するには先にプロジェクトをアンロードする必要があります。 プロジェクトをアンロードする必要がある場合は、プロジェクト ノードを右クリックし、[プロジェクトのアンロード] を選択します。

  2. 新しい PropertyGroup セクションで、NoWarn プロパティを使用します。 抑制するエラーは、カンマまたはセミコロンで区切って一覧表示します。 コンパイラの警告の場合、言語コードを省略して番号のみを入力することもできますが、わかりやすくするために完全なコードを使用することをお勧めします。 ビルドに含まれる他のツールからの警告の場合は、接頭辞を含む完全なコードを指定します (MSBuild 自体で発行した警告の場合は MSB など)。

    以下のコードでは、警告 CS0028 と CS0618 を抑制済み警告の一覧に追加しています。

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

    前の例に示したように、$(NoWarn) の前の値を参照すると、NoWarn に以前に設定された値に、上書きではなく、その数値が追加されます。

NoWarn を参照してください。

ビルド コマンド ラインからの警告を抑制する

コマンド ラインからプロジェクトをビルドする場合、MSBuild コマンド ラインで -warnAsMessage を使用することで、警告を抑制することもできます。 複数の警告コードの一覧は引用符で囲みます。

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

詳細については、「MSBuild コマンド ライン リファレンス」をご覧ください。

ツールの警告を抑制する

MSBuild などのコンパイラ以外のツールからの警告を抑制する方法は、プロジェクトの種類や使用している MSBuild のバージョンによって異なります。

MSBuild 16.8 以降では、SDK または標準インポートを使用するプロジェクトで、前述の方法と同じ方法を使用してツールの警告を抑制できます。 コンパイラの警告のように数字だけでなく、完全なエラーコード (MSBuild の場合は MSB のような接頭辞を含む) を指定する必要があります。 また、このメッセージは削除されたわけではなく、引き続き情報メッセージとして表示されていますが、警告から降格したものです。

MSBuild 16.7 以前で、SDK や標準インポートを使用していないプロジェクトでは、NoWarn を使用してもこれらの警告は抑制されません。 このような場合、ツールの警告を抑制するために使用できるプロパティは MSBuildWarningsAsMessages です。 プロジェクト ファイルを編集するか、MSBuild コマンド ラインで MSBuildWarningsAsMessages オプションを指定することで、ビルド警告を抑制できます。 MSBuildWarningsAsMessages を使用する場合は、接頭辞 MSB を含む完全な MSBuild エラー コードを使用します。

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

MSBuild の警告の中には、MSBuildWarningsAsMessages を設定しても抑制できないものがあることに注意してください。 無効にするには、warnAsMessage コマンド ライン オプションを使用します。

また、一部の警告には、警告を無効にするために設定できる特定のプロパティがあります。 たとえば、MSB3253 は以下のプロパティを設定することで無効になります。

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

エラー コード単体では理解しにくいため、可能な限り、より明示的なプロパティを使用します。 そのコードのエラー リファレンス ページには、通常、そのコードを無効にするために使用されるプロパティが含まれます。

NuGet パッケージの警告を非表示にする

場合によっては、プロジェクト全体ではなく、1 つの NuGet パッケージに対して NuGet コンパイラの警告を非表示にしたい場合があります。 警告は役に立つため、プロジェクト レベルで非表示にしたくない場合があります。 たとえば、NuGet 警告のうちの 1 つは、パッケージがプロジェクトと完全に互換性がない可能性を示します。 これをプロジェクト レベルで非表示にし、後で追加の NuGet パッケージを追加すると、互換性に関する警告が生成されたかどうかがわからなくなります。

1 つの NuGet パッケージに対して特定の警告を非表示にするには

  1. ソリューション エクスプローラーで、コンパイラの警告を非表示にする NuGet パッケージを選択します。

    Screenshot of NuGet package in Solution Explorer.

    Screenshot of NuGet package in Solution Explorer.

  2. 右クリックまたはコンテキスト メニューから、[プロパティ] を選択します。

  3. パッケージのプロパティの [警告の表示なし] ボックスで、このパッケージに対して非表示にする警告番号を入力します。 複数の警告を非表示にする場合は、コンマを使用して警告番号を区切ります。

    NuGet package properties

    Screenshot of NuGet package properties

    ソリューション エクスプローラーエラー一覧から警告が消えます。 プロジェクト ファイルでは、NoWarn プロパティが設定されます。

     <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>