適用於診斷訊息的 MSBuild 和 Visual Studio 格式
執行可輸出某些文字的工具時,MSBuild 會檢查文字是否有錯誤和警告。 許多工具會使用已知格式來回報這些訊息。 根據預設,MSBuild 會檢查文字,並根據輸出來回報錯誤和/或警告。 您可以在 Exec
工作上使用這些參數來增強或停用此行為:IgnoreStandardErrorWarningFormat
、CustomErrorRegularExpression
和 CustomWarningRegularExpression
。
注意
如果您決定使用自己的規則運算式來偵測錯誤和警告,您應該知道 MSBuild 會一次查看一行結果。 即使您的自訂規則運算式會比對跨多行的內容,也不會因為 MSBuild 處理該文字的方式而以這種方式運作。
請查看下列四則訊息,這些訊息全都已正確格式化,並由 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.
這些訊息符合此處顯示的特殊五部分格式。 這些部分的順序很重要,不得變更。
例如,
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 通常是工具名稱,例如其中一個範例中的
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 必須是「錯誤」或「警告」。 大小寫沒有關係。 如同 Origin,Category 不得當地語系化。
Code (選擇性) Code 識別應用程式特定的錯誤碼/警告碼。 Code 不得當地語系化,且不得包含空格。
Text 說明錯誤的易記文字,而且如果您迎合多個地區設定,則必須將其當地語系化。
當 MSBuild 呼叫命令列工具時 (例如,csc.exe
或 vbc.exe
),其會查看工具發出至標準輸出和標準錯誤串流的輸出。 任何符合我剛才描述之錯誤格式的行都會經過特別處理;也就是說,辨識為錯誤或警告的行會分別變成建置錯誤和警告。 若要查看真正的優點,您必須從 Visual Studio 或 VS Code 等開發工具內建置。 因為 MSBuild 會特別處理這些訊息,所以會在 Visual Studio 工作清單中將其記錄為一級的警告和錯誤。 如果 Origin 指定行/資料行資訊,則按兩下訊息會帶您前往違規檔案中錯誤的來源。