コンパイラの警告を抑制する
Visual Studio では、プロジェクト デザイナー (プロジェクト プロパティ ページ) で警告コードを指定することで、抑制する警告を指定できます。 また、特定のプロパティをプロジェクト ファイルに直接設定するか、コマンド ラインを使用して、または 1 つの場所でのみ警告を抑制する場合はコード内で、警告を抑制することもできます。
一部のコンパイラおよびビルド ツールには、警告レベルを指定するオプションもあります。 これにより、警告のカテゴリを 1 つの設定で制御できます。 これらのオプションについては、使用している特定の言語とコンパイラのドキュメントを参照してください。
ビルド ログでより簡潔で焦点を絞った出力を表示することが目的の場合は、ビルド ログの詳細度を変更できます。 使用可能な設定は、標準、詳細、または 診断です。 詳細さの情報については、「ビルド ログ ファイルを表示、保存、および構成する方法」をご覧ください。
注意
警告はコードの潜在的な問題を示すことを意図しているため、特定の警告を無効にするリスクを理解する必要があることに注意してください。 Visual Studio の設定では、プロジェクト レベルで警告が無効になります。 Visual Studio が提供するよりも、より対象を絞った方法を使用して警告を無効にしたい場合があります。 ほとんどのコンパイラでは、特定のコード行に対して警告を無効にする方法が用意されているため、同じプロジェクト内の別の場所で警告が発生した場合でも、警告を確認できます。
Visual C# または F の特定の警告を抑制する#
Build プロパティを使用して、C# および F# プロジェクト全体に対する特定の警告を抑制します。 C# のコードの特定の部分でのみ警告を抑制する場合は、警告 #pragma 使用します。 F# の場合は、プリプロセッサ ディレクティブ #nowarn 使用して、ソース ファイル全体に対する警告を無効にします。
ソリューション エクスプローラー で、警告を抑制するプロジェクトを選択します。
プロジェクト ノードを右クリックし、コンテキスト メニューの [プロパティ] 選択します。 または、プロジェクト ノードを選択し、Alt キー 押+Enter キー押します。
ビルドを選択し、サブセクション[エラーと警告]に移動します。
[警告の抑制 または 特定の警告の抑制 ボックスで、抑制する警告のエラー コードをセミコロンで区切って指定します。 警告コードの一覧と説明については、「C# コンパイラ メッセージの」を参照してください。
ソリューションをリビルドします。
ソリューション エクスプローラー で、警告を抑制するプロジェクトを選択します。
プロジェクト ノードを右クリックし、コンテキスト メニューの [プロパティ] 選択します。 または、プロジェクト ノードを選択し、Alt キー 押+Enter キー押します。
ビルド ページまたはセクションを選択し、現在の UI を使用している場合は、エラーと警告 のサブセクションを開きます。
[警告の抑制 または 特定の警告の抑制 ボックスで、抑制する警告のエラー コードをセミコロンで区切って指定します。 警告コードの一覧と説明については、「C# コンパイラ メッセージの」を参照してください。
ソリューションをリビルドします。
C++ の特定の警告を抑制する
プロジェクトのプロパティを使用すると、C++ プロジェクトの警告を抑制できます。構成プロパティ プロパティ ページを使用して、C++ プロジェクト全体に対する特定の警告を抑制します。 #pragma warning
を使用して、特定のファイルの警告を抑制することもできます。 この記事ではプロジェクト レベルの制御について説明しますが、特定のファイルまたはコードの数行付近で警告を無効にすることを意図しているが、同じ警告の他の発生を引き続き確認する場合は、#pragma warning
の使用を検討する必要があります。 「#pragma 警告」を参照してください。
ソリューション エクスプローラーで、警告を抑制するプロジェクトまたはソース ファイルを選択します。
メニュー バーで、[表示]>[プロパティ ページ] の順に選択します。
構成プロパティ カテゴリを選択し、C/C++ カテゴリを選択して、[詳細] ページを選択します。
次のいずれかの手順を実行します。
[特定の警告を無効にする] ボックスで、抑制する警告のエラー コードをセミコロンで区切って指定します。
[特定の警告の を無効にする] ボックスで、[ 編集] を選択して、その他のオプションを表示します。
[OK] ボタンを選択し、ソリューションをリビルドします。
警告が別のツールからの場合は、特定のツールのドキュメントを参照して、そのツールの警告を抑制する方法を確認してください。 たとえば、C++ リンカーには、/IGNORE
リンカー オプションを使用して無効にできる警告があります。 /IGNORE (特定の警告を無視する) を参照し、このオプションを設定するには、/link (リンカーにオプションを渡す) を参照してください。
Visual Basic の警告を抑制する
プロジェクトの .vbproj
ファイルを編集することで、Visual Basic の特定のコンパイラ警告を非表示にすることができます。 警告をカテゴリ で抑制するには、[コンパイル] プロパティ ページ を使用することができます。 コード ファイルの特定の部分で警告を無効にする場合は、#Disable ディレクティブと #Enable ディレクティブ使用します。 詳細については、「Visual Basicで警告を構成する」を参照してください。
Visual Basic プロジェクト全体に対する特定の警告を抑制するには
この例では、.vbproj
ファイルを編集して、特定のコンパイラ警告を抑制する方法を示します。
ソリューション エクスプローラー で、警告を抑制するプロジェクトを選択します。
メニューバーで [プロジェクト]>を選択し、[プロジェクトをアンロード]を実行します。
** ソリューション エクスプローラーで、プロジェクトの右クリックメニューまたはショートカットメニューを開き、[>ProjectName.vbproj <編集] を選択します。
XML プロジェクト ファイルがコード エディターで開きます。
ビルドするビルド構成の
<NoWarn>
要素を見つけ、<NoWarn>
要素の値として 1 つ以上の警告番号を追加します。 複数の警告番号を指定する場合は、コンマで区切ります。次の例は、x86 プラットフォーム上の Debug ビルド構成の
<NoWarn>
要素を示しています。2 つのコンパイラ警告は抑制されています。<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>
手記
.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>
変更を
.vbproj
ファイルに保存します。メニュー バーの [プロジェクト] >[プロジェクトの再読み込み]選択します。
メニュー バーで、[ビルド]>[ソリューションのリビルド] の順に選択します。
出力 ウィンドウに、指定した警告が表示されなくなります。
詳細については、Visual Basic コマンド ライン コンパイラの /nowarn コンパイラ オプション を参照してください。
個々の警告の警告を非表示にしたり、カテゴリ別に表示したりできます。 このエクスペリエンスは、.NET Framework プロジェクトと .NET Core (または .NET 5 以降) プロジェクトのどちらを使用しているかによって異なります。
コード ファイルの特定の部分で警告を無効にする場合は、#Disable ディレクティブと #Enable ディレクティブ使用します。 詳細については、「Visual Basicで警告を構成する」を参照してください。
.NET 5 以降のプロジェクト
プロジェクト ファイルを編集して診断コードによる特定のコンパイラ警告を抑制したり、プロジェクト デザイナーを使用してカテゴリ別の警告を抑制したりできます。 プロジェクト デザイナーを開くには、プロジェクト ノードを選択し、右クリックして [プロパティ] 選択するか、Alt キー 押+Enterキーを押します。
[コンパイル] セクションで[警告]を選択します。 警告の重大度 の下で、[警告の重大度を個別に設定 ]を選択できます。 カテゴリが表示され、各カテゴリを None に設定して警告のカテゴリを無効にするか、警告 またはエラー に設定して警告またはエラーとして有効にすることができます。
.NET Framework プロジェクト
プロジェクトの .vbproj
ファイルを編集することで、Visual Basic の特定のコンパイラ警告を非表示にすることができます。 カテゴリ による警告を抑制するには、[コンパイル] プロパティ ページ を使用できます。
Visual Basic プロジェクト全体に対する特定の警告を抑制するには
この例では、.vbproj
ファイルを編集して、特定のコンパイラ警告を抑制する方法を示します。
ソリューション エクスプローラー で、警告を抑制するプロジェクトを選択します。
(.NET)プロジェクト ノードをダブルクリックして、プロジェクト ファイルを開きます。
(.NET Framework)メニュー バーの [プロジェクト] >[プロジェクトのアンロード]選択します。 次に、ソリューション エクスプローラー で、プロジェクトの右クリックメニューまたはショートカット メニューを開き、[.vbproj >ProjectName <編集]選択します。
MSBuild プロジェクト ファイルがコード エディターで開きます。 これは XML ファイルです。
ビルドするビルド構成の
<NoWarn>
要素を見つけ、<NoWarn>
要素の値として 1 つ以上の警告番号を追加します。 複数の警告番号を指定する場合は、コンマで区切ります。次の例は、x86 プラットフォーム上の Debug ビルド構成の
<NoWarn>
要素を示しています。2 つのコンパイラ警告は抑制されています。<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>
手記
.NET Core および .NET 5 以降のプロジェクトには、既定ではビルド構成プロパティ グループは含まれません。 .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>
変更を
.vbproj
ファイルに保存します。メニュー バーの [プロジェクト] >[プロジェクトの再読み込み]選択します。
メニュー バーで、[ビルド] を選択し、>[ソリューションのリビルド]を選択します。
出力 ウィンドウに、指定した警告が表示されなくなります。
詳細については、Visual Basic コマンド ライン コンパイラの /nowarn コンパイラ オプション を参照してください。
プロジェクト ファイルを編集して警告を表示しない
Visual Studio プロパティ デザイナーを使用して警告を抑制すると、プロジェクト ファイルが変更されます。 場合によっては、プロジェクト ファイルを手動で編集して、警告を無効にするタスクを実行する方が便利な場合があります。 プロジェクト ファイルは、Microsoft のビルド エンジンである MSBuild によって処理されます。 「MSBuild」を参照してください。
また、Visual Studio 2019 バージョン 16.7 以前では、コンパイラ以外のツールからの一部の警告は、他の方法では抑制できません。
Visual Studio エディターでプロジェクト ファイルを開くには、プロジェクト ノードを右クリックし、[プロジェクト ファイルの編集] 選択します。 プロジェクトの種類によっては、プロジェクト ファイルを編集する前にプロジェクトをアンロードする必要があります。 プロジェクトをアンロードする必要がある場合は、プロジェクト ノードを右クリックし、[プロジェクト のアンロード]選択します。
新しい
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 コマンド ライン リファレンス を参照してください。
ディレクトリ構造内のすべてのプロジェクトとソリューションに対する警告を抑制する
多数のプロジェクトの警告がファイル システム内の共通ディレクトリの下にある場合は、Directory.Build.props MSBuild ファイルを使用して、警告を一度に抑制できます。 「ディレクトリでビルドをカスタマイズする」を参照してください。 たとえば、次の Directory.Build.props ファイルを、多くのソリューションとプロジェクトがあるフォルダーのルートに配置すると、そのフォルダー内およびそのフォルダー内のサブフォルダーのすべてのプロジェクトに対して、指定された警告一覧を再帰的に抑制することができます。
<Project>
<PropertyGroup>
<NoWarn>$(NoWarn);CS0028;CS0618</NoWarn>
</PropertyGroup>
</Project>
ツールの警告を抑制する
コンパイラ以外のツール (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 パッケージに対する特定の警告を抑制するには
ソリューション エクスプローラーので、コンパイラの警告を抑制する NuGet パッケージを選択します。
右クリックまたはコンテキスト メニューから、[プロパティ] 選択します。
パッケージのプロパティの [警告の抑制] ボックスに、このパッケージに対して抑制する警告番号を入力します。 複数の警告を抑制する場合は、コンマを使用して警告番号を区切ります。
NuGet パッケージのプロパティ
のスクリーンショット
ソリューション エクスプローラーからと エラー一覧から警告が消えます。 プロジェクト ファイルでは、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>
コード分析の警告を抑制する
CA
で始まるコードを含む診断メッセージは、コード分析の違反と警告であり、この記事で説明するコンパイラの警告とは異なります。 ルール構成ファイルを使用して、サイト固有のマークアップやプロジェクト全体またはグローバルの使用など、さまざまな方法でコード分析の警告を抑制できます。 「Code Analysis の警告を抑制する方法」、および「Code Analysis の違反を抑制する方法」をご確認ください。
関連コンテンツ
- チュートリアル: アプリケーション を構築する
- 方法: ビルド ログ ファイルを表示、保存、構成
- コンパイルとビルド
- Code Analysis
- エラーと警告を報告する C# コンパイラ オプションを
- Visual Basic での警告の構成
- C++ コンパイラのエラーと警告