Visual Basic での警告の構成
Visual Basic コンパイラには、実行時エラーの原因となる可能性があるコードに関する一連の警告が含まれています。 その情報を使用して、バグを減らしながら、よりクリーンで高速で優れたコードを記述できます。 たとえば、ユーザーが割り当てられていないオブジェクト変数のメンバーの呼び出し、戻り値を設定せずに関数から戻る、またはロジック内のエラーを含む Try
ブロックを実行して例外をキャッチしようとすると、コンパイラによって警告が生成されます。
コンパイラがユーザーの代わりに追加のロジックを提供して、ユーザーがエラーの可能性を予測するのではなく、手元のタスクに集中できる場合があります。 以前のバージョンの Visual Basic では、Option Strict を使用して、Visual Basic コンパイラが提供する追加のロジックを制限していました。 警告を構成すると、個々の警告のレベルで、このロジックをより細かく制限できます。
他の警告をエラーに変えながら、プロジェクトをカスタマイズし、アプリケーションに関連しないいくつかの警告をオフにすることができます。 このページでは、個々の警告のオンとオフを切り替える方法について説明します。
警告のオフとオンを切り替える
警告を構成するには、いくつかの異なる方法があります。プロジェクト デザイナーを使用して警告を構成したり、/warnaserror を使用したり、/nowarn コンパイラ オプションを したり、プロジェクト ファイル (vbproj
ファイル) を編集したり、NoWarn
MSBuild プロパティを使用したりできます。 MSBuild プロパティを使用するには、「Visual Basic プロジェクト全体の特定の警告を抑制する」を参照してください。
プロジェクト デザイナーの エクスペリエンスは、.NET Framework プロジェクトと .NET Core (または .NET 5 以降) プロジェクトのどちらを使用しているかによって異なります。
.NET Core (または .NET 5 以降) プロジェクトでは、プロジェクト デザイナー の [コンパイル] セクションには、警告の重大度 という設定が含まれています。この設定を使用すると、すべての警告を無効にしたり、すべての警告をエラーに昇格させたり、警告の各カテゴリを個別に制御したりできます (既定)。 警告カテゴリの設定は、プロジェクト デザイナーの同じ領域に表示されます。
.NET Framework プロジェクトで、プロジェクト デザイナーの [コンパイル] タブで、[すべての警告 を無効にする] チェック ボックスをオンにして、すべての警告を無効にします。すべての警告をエラーとして扱う を選択して、すべての警告をエラーとして扱います。 一部の個別の警告は、表示されるテーブルで必要に応じてエラーまたは警告として切り替えることができます。
プロジェクト デザイナーの ページの [コンパイル] タブでは、警告のオンとオフを切り替えます。 すべての警告を無効にするには、[すべての警告 を無効にする] チェック ボックスをオンにします。[すべての警告をエラーとして扱う] を選択、すべての警告をエラーとして扱います。 一部の個別の警告は、表示されるテーブルで必要に応じてエラーまたは警告として切り替えることができます。
Option Strict が Offに設定されている場合、Option Strict 関連の警告は互いに独立して処理できません。 Option Strict が Onに設定されている場合、関連する警告は、状態に関係なくエラーとして扱われます。 コマンド ライン コンパイラで /optionstrict:custom
を指定することによって Option Strict がカスタムに設定されていると、Option Strict の警告のオン/オフを独立して切り替えることができます。
コンパイラの /warnaserror コマンド ライン オプションを使用して、警告をエラーとして扱うかどうかを指定することもできます。 このオプションにコンマ区切りリストを追加すると、+ または -を使用してエラーまたは警告として扱う警告を指定できます。 次の表では、使用可能なオプションについて詳しく説明します。
コマンド ライン オプション | 指定内容 |
---|---|
/warnaserror+ または /warnaserror |
すべての警告をエラーとして扱う |
/warnsaserror- |
警告はエラーとして扱わないでください。 この設定が既定です。 |
/warnaserror+:<warning list > |
特定の警告をエラーとして扱います。エラー ID 番号はコンマ区切りのリスト r で示されます。 |
/warnaserror-:<warning list> |
特定の警告をエラーとして扱わないでください。エラー ID 番号でコンマ区切りの一覧に表示されます。 |
/nowarn |
警告を報告しないでください。 |
/nowarn:<warning list> |
警告を報告しないように指定してください。その警告はエラー ID 番号でコンマ区切りのリストで示されます。 |
警告リストには、エラーとして扱う必要がある警告のエラー ID 番号が含まれています。これは、コマンド ライン オプションと共に使用して、特定の警告のオンとオフを切り替えることができます。 警告リストに無効な番号が含まれている場合は、エラーが報告されます。
例示
このコマンド ライン引数の例の表では、各引数の動作について説明します。
引数 | 説明 |
---|---|
vbc /warnaserror |
すべての警告をエラーとして扱う必要があることを指定します。 |
vbc /warnaserror:42024 |
警告 42024 をエラーとして扱う必要があることを指定します。 |
vbc /warnaserror:42024,42025 |
警告 42024 と 42025 をエラーとして扱う必要があることを指定します。 |
vbc /nowarn |
警告を報告しない必要があることを指定します。 |
vbc /nowarn:42024 |
警告 42024 を報告しないことを指定します。 |
vbc /nowarn:42024,42025 |
警告 42024 と 42025 を報告しないように指定します。 |
警告の種類
エラーとして扱う可能性がある警告の一覧を次に示します。
暗黙的な変換の警告
暗黙的な変換のインスタンスに対して生成されます。 &
演算子を使用する場合、組み込みの数値型から文字列への暗黙的な変換は含まれません。 新しいプロジェクトでの既定値はオフです。
ID: 42016
遅延バインド メソッドの呼び出しおよびオーバーロードの解決の警告
遅延バインディングのインスタンスに対して生成されます。 新しいプロジェクトのデフォルト設定はオフです。
ID: 42017
'Object' 型のオペランドに関する警告
Option Strict On でエラーを作成する Object
型のオペランドが発生したときに生成されます。 新しいプロジェクトの既定値はオンです。
ID: 42018 および 42019
'As' 句が必要な宣言の警告
As
句がない変数、関数、またはプロパティの宣言が、Option Strict Onでエラーを引き起こす場合に生成されます。 型が割り当てられない変数は、Object
型と見なされます。 新しいプロジェクトの既定値はオンです。
ID: 42020 (変数宣言)、42021 (関数宣言)、および 42022 (プロパティ宣言)。
Null 参照例外の可能性の警告
変数が値を割り当てられる前に使用されたときに生成されます。 新しいプロジェクトの既定値はオンです。
ID: 42104、42030
未使用のローカル変数の警告
ローカル変数が宣言されていても参照されない場合に生成されます。 既定値はオンです。
ID: 42024
インスタンス変数を通じた共有メンバーアクセスの警告
インスタンスを介して共有メンバーにアクセスすることで副作用が発生する場合、あるいはインスタンス変数を介して共有メンバーにアクセスする際に、それが式の右辺でない場合やパラメーターとして渡されるときに生成されることがあります。 新しいプロジェクトの既定値はオンです。
ID: 42025
演算子またはプロパティの再帰的なアクセスの警告
ルーチンの本体が定義されているのと同じ演算子またはプロパティを使用する場合に生成されます。 新しいプロジェクトの既定値はオンです。
ID: 42004 (演算子)、42026 (プロパティ)
戻り値の警告のない関数または演算子
関数または演算子で戻り値が指定されていない場合に、生成されます。 これには、関数と同じ名前の暗黙的なローカル変数への Set
の省略が含まれます。 新しいプロジェクトの既定値はオンです。
ID: 42105 (関数)、42016 (演算子)
モジュール警告で使用されるオーバーロード修飾子
Module
で Overloads
が使用されたときに生成されます。 新しいプロジェクトの既定値はオンです。
ID: 42028
重複またはオーバーラップする Catch ブロックの警告
定義されている他の Catch
ブロックとの関係により、Catch
ブロックに到達しなかった場合に生成されます。 新しいプロジェクトの既定値はオンです。
ID: 42029、42031