似乎msbuild将所有输出(包括错误输出)写入标准输出。
是否有某种方法可以将错误输出(通常以红色输出)写入标准错误?
我正在编写一个带有WPF和控制台界面的.NET应用程序,并使用System.Diagnostics.Process调用msbuild。我希望能够以某种方式区分错误输出。
分离输出是否比在每行中查找“错误”或直接使用Microsoft.Build +自定义记录器更好?
答案 0 :(得分:8)
看看MSBUILD.EXE command line arguments page。特别是consoleloggerparameters开关。
您可以使用/ clp:ErrorsOnly仅显示控制台输出中的错误。
如果您需要输出的其余部分,请在“/ fl4 /flp4:errorsOnly;logfile=MSBuild.Errors.log”中包含仅错误文件日志,监视新行的文件。
答案 1 :(得分:1)
我知道你说你想避免使用自定义记录器,但是......我还想在stderr上输出错误并发现编写自定义记录器并不是那么痛苦 - 1个类带有1个方法和1个语句:
using Microsoft.Build.Utilities;
using Microsoft.Build.Framework;
public class ErrorOnlyLogger : Logger
{
public override void Initialize(IEventSource eventSource)
{
eventSource.ErrorRaised += (s, e) => {
System.Console.Error.WriteLine(
"{0}({1},{2}): error {3}: {4} [{5}]",
e.File, e.LineNumber, e.ColumnNumber, e.Code, e.Message, e.ProjectFile);
};
}
}
这使用与msbuild相同的错误格式。这适用于命令行msbuild 14.0.25420.1。该代码引用C:\ Program Files(x86)\ MSBuild \ 14.0 \ Bin中的Microsoft.Build.Utilities.Core.dll和Microsoft.Build.Framework.dll。我将/logger:ErrorOnlyLogger,path\ErrLogger.dll添加到命令行以调用它。