如何在 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: 这是一个错误信息。"); } } }

对于这样一段在编译期间执行的程序,编译时将显示以下信息,并产生编译错误和编译警告。3d

 

说明解释

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

更复杂的错误和警告控制

实际上,上面的 warningerror 只是省略的格式,而完整的部分是这样的:code

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"orm

<Exec IgnoreStandardErrorWarningFormat="True" Command="$(OutputPath)$(AssemblyName).exe" />
相关文章
相关标签/搜索