Skip to content

msbuild 自定义日志输出

Published: at 19:04

自定义构建日志输出,过滤不想看到的无关日志

原理

visual studio 2013 - How to have MSBuild quiet output but with error/warning summary - Stack Overflow

IEventSource Interface (Microsoft.Build.Framework) | Microsoft Docs

代码

using System;
using Microsoft.Build.Utilities;
using Microsoft.Build.Framework;
public class CustomLogger : Logger
{
private int warnings = 0;
private int errors = 0;
public override void Initialize(IEventSource eventSource)
{
eventSource.WarningRaised += (s, e) => ++warnings;
eventSource.ErrorRaised += (s, e) =>
{
++errors;
string line = String.Format("ERROR {0}({1},{2}): ", e.File, e.LineNumber, e.ColumnNumber);
Console.WriteLine(line + e.Message);
};
eventSource.BuildFinished += (s, e) =>
{
Console.WriteLine(errors == 0 ? "Build succeeded." : "Build failed.");
Console.WriteLine(String.Format(" {0} Warning(s)", warnings));
Console.WriteLine(String.Format(" {0} Error(s)", errors));
};
}
}

命令

编译自定义日志组件 DLL 的命令:

Terminal window
csc /t:library CustomLogger.cs /reference:Microsoft.Build.Utilities.v4.0.dll;Microsoft.Build.Framework.dll

编译命令(日志配置):

msbuild /logger:CustomLogger.dll /noconsolelogger

编译命令(日志配置),指定 CustomLogger.dll 目录:

msbuild /m /p:Configuration=Release /logger:".\Build\tools\CustomLogger.dll" /noconsolelogger

效果

msbuild 编译安静了很多,没有错误的话,就没有任何输出。

当然,如果只是想仅输出错误,有更简单的方法:

Terminal window
msbuild -m -p:Configuration=Release /consoleloggerparameters:ErrorsOnly

使用 /consoleloggerparameters:ErrorsOnly 即可。

P.S.

nuget 命令,可使用 -v q 参数简化输出。
NuGet CLI restore command | Microsoft Docs

参考

MSBuild Command-Line Reference - MSBuild | Microsoft Learn

View, save, and configure build log files - Visual Studio (Windows) | Microsoft Learn


原文链接: https://blog.jgrass.cc/posts/msbuild-custom-log/

本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。