診断メッセージの MSBuild と Visual Studio の形式

テキストを出力するツールが実行されると、MSBuild ではテキストにエラーと警告がないか調べます。 多くのツールでは、これらのメッセージを報告するために既知の形式が使用されています。 既定では、MSBuild ではテキストを調べ、出力に基づいてエラーや警告を報告します。 この動作は、Exec タスクで次のパラメーターを使用して変更または無効にすることができます: IgnoreStandardErrorWarningFormatCustomErrorRegularExpressionCustomWarningRegularExpression

Note

独自の正規表現を使用してエラーと警告を検出する場合は、MSBuild が一度に 1 行ずつ結果を確認することを知る必要があります。 カスタム正規表現が複数行にわたって一致する場合でも、MSBuild がそのテキストを処理する方法により、そのように動作しません。

次の 4 つのメッセージを見てみましょう。これはすべて正しく書式設定されており、MSBuild と Microsoft Visual Studio によって認識されます。

Main.cs(17,20): warning CS0168: The variable 'x' is declared but never used
C:\dir1\strings.resx(2) : error BC30188: Declaration expected.
cl : Command line warning D4024 : unrecognized source file type 'file1.cs', object . . .
error CS0006: Metadata file 'System.dll' could not be found.

これらのメッセージは、ここに示す特殊な 5 部構成の形式に準拠しています。 これらの部分の順序は重要であり、変更しないでください。

Origin : SubcategoryCategoryCode : Text

たとえば、次のように入力します。

c1 : Command line warning D4024 : unrecognized source file type 'test.xyz'

Origin: c1
Subcategory: Command line
Category: warning
Code: D4024
Text: unrecognized source file type 'test.zyz'

この形式の各構成要素の説明については、次のとおりです。

  • Origin (必須) Origin は空白にすることができます。 存在する場合、Origin は通常、例の 1 つの cl のようなツール名です。 ただし、別の例に示すように、"Main.cs" などのファイル名にすることもできます。 ファイル名の場合は、絶対または相対ファイル名の後に、省略可能なかっこで囲まれた行または列情報を次のいずれかの形式で指定する必要があります。

    (line) or (line-line) or (line-col) or (line,col-col) or (line,col,line,col)
    

    行と列は、ファイル内の 1 から始まります。つまり、ファイルの先頭は 1 で、左端の列は 1 です。 Origin がツール名の場合は、ロケールに基づいて変更しないでください。つまり、ロケールに依存しない必要があります。

  • Subcategory (省略可能) Subcategory は、カテゴリ自体をさらに分類するために使用されます。ローカライズしないでください。

  • Category (必須) Category は、"error" または "warning" である必要があります。 大文字と小文字は関係ありません。 Origin と同様に、カテゴリをローカライズすることはできません。

  • Code (省略可能) Code は、アプリケーション固有のエラー コードまたは警告コードを識別します。 Code はローカライズしないでください。また、スペースを含めることはできません。

  • Text エラーを説明するわかりやすいテキスト。複数のロケールに対応する場合はローカライズする必要があります。

MSBuild がコマンド ライン ツール (たとえば、csc.exe または vbc.exe) を呼び出すと、ツールによって標準出力および標準エラー ストリームに出力された出力が確認されます。 ここで説明したエラー形式と一致する行は特別に扱われます。つまり、エラーまたは警告として認識される行は、それぞれビルド エラーと警告に変換されます。 この本当の利点を確認するには、Visual Studio や VS Code などの開発ツール内から構築する必要があります。 MSBuild は、これらのメッセージを特別に扱うため、Visual Studio タスク リストの最上位の警告とエラーとしてログに記録されます。 Origin で行または列の情報が指定されている場合は、メッセージをダブルクリックすると、問題のあるファイル内のエラーのソースに移動します。