如何在 MSBuild Target(Exec)中報告編譯錯誤和編譯警告

編譯錯誤和編譯警告

 MSBuild 的 Exec 自帶有錯誤和警告的標準格式,按照此格式輸出,將被識別爲編譯錯誤和編譯警告。ui

而格式只是簡簡單單的 error: 開頭或者 warning: 開頭。冒號前面也能夠加上空格。spa

using System;

namespace Walterlv.Demo
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("warning: 這是一個警告信息。");
            Console.WriteLine("error: 這是一個錯誤信息。");
        }
    }
}

對於這樣一段在編譯期間執行的程序,編譯時將顯示以下信息,併產生編譯錯誤和編譯警告。code

 

說明解釋

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net47</TargetFramework>
  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="$(OutputPath)$(AssemblyName).exe" />
  </Target>
</Project>

更復雜的錯誤和警告控制

實際上,上面的 warningerror 只是省略的格式,而完整的部分是這樣的:orm

file_path(line_start,column_start,line_end,column_end): error_or_warning key: message
  • file_path 是文件的絕對路徑或相對於項目文件的路徑,這樣的輸出以後在 Visual Studio 中雙擊以後能夠定位到文件。
  • line_start、column_start、line_end、column_end 控制雙擊以後選中文件的開始和結束行列。
  • error_or_warning 可選爲 error 或者 warning。
  • key 是一個惟一標識符,若是用戶認爲能夠忽略這樣的錯誤,則能夠使用這個惟一的 key 來禁止某一特定項的警告。
  • message 則是普通的消息提示內容。
Demo.cs(344,59,344,78): warning CS0067: The event 'WalterlvClass.Foo' is never used.

阻止編譯錯誤和編譯警告的格式化識別

固然,有可能你只是須要一個 error: 開頭或者 warning: 開頭的格式,並不但願真的產生編譯錯誤或者編譯警告,那麼只須要在執行 Exec 的時候設置 IgnoreStandardErrorWarningFormat="True"xml

<Exec IgnoreStandardErrorWarningFormat="True" Command="$(OutputPath)$(AssemblyName).exe" />
相關文章
相關標籤/搜索