前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在 MSBuild Target(Exec)中报告编译错误和编译警告

如何在 MSBuild Target(Exec)中报告编译错误和编译警告

作者头像
walterlv
发布2018-09-18 13:41:45
7180
发布2018-09-18 13:41:45
举报
文章被收录于专栏:walterlv - 吕毅的博客

如何在 MSBuild Target(Exec)中报告编译错误和编译警告

发布于 2018-06-20 05:17 更新于 2018-07-02 12:49

我曾经写过一篇文章 如何创建一个基于命令行工具的跨平台的 NuGet 工具包,通过编写一个控制台程序来参与编译过程。但是,相比于 基于 Task 的方式,可控制的因素还是太少了。

有没有什么办法能够让控制台程序也能与 MSBuild Target 之间发生更多的信息交换呢?比如报告编译错误和编译警告?答案是有的,通过格式化控制台输出。


编译错误和编译警告

MSBuild 的 Exec 自带有错误和警告的标准格式,按照此格式输出,将被识别为编译错误和编译警告。

而格式只是简简单单的 error: 开头或者 warning: 开头。冒号前面也可以加上空格。

代码语言:javascript
复制
using System;

namespace Walterlv.Demo
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("warning: walterlv 最好是一个逗比。");
            Console.WriteLine("error: walterlv 必须是一个逗比。");
        }
    }
}

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

当然,在这个例子中,我直接在编译完成后执行自己,产生了这样的编译错误。

代码语言:javascript
复制
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net47</TargetFramework>
  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="$(OutputPath)$(AssemblyName).exe" />
  </Target>
</Project>

更复杂的错误和警告控制

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

代码语言:javascript
复制
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 则是普通的消息提示内容。
代码语言:javascript
复制
Demo.cs(344,59,344,78): warning CS0067: The event 'WalterlvClass.Foo' is never used.

阻止编译错误和编译警告的格式化识别

当然,有可能你只是需要一个 error: 开头或者 warning: 开头的格式,并不希望真的产生编译错误或者编译警告,那么只需要在执行 Exec 的时候设置 IgnoreStandardErrorWarningFormat="True"

代码语言:javascript
复制
<Exec IgnoreStandardErrorWarningFormat="True" Command="$(OutputPath)$(AssemblyName).exe" />

参考资料

本文会经常更新,请阅读原文: https://walterlv.com/post/standard-error-warning-format.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (walter.lv@qq.com)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-06-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何在 MSBuild Target(Exec)中报告编译错误和编译警告
    • 编译错误和编译警告
      • 更复杂的错误和警告控制
        • 阻止编译错误和编译警告的格式化识别
        相关产品与服务
        命令行工具
        腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档