看起来msbuild将所有输出(包括错误输出)都写入标准输出。
有没有办法让它将错误输出(通常以红色输出的内容)写入标准错误流中呢?
我正在编写一个带有WPF和控制台界面的.NET应用程序,并使用System.Diagnostics.Process调用msbuild。我希望能够以某种方式区分向用户输出的错误信息。
除了在每一行中查找“error”或直接使用Microsoft.Build +自定义记录器之外,是否有更好的分离输出的方法呢?
看起来msbuild将所有输出(包括错误输出)都写入标准输出。
有没有办法让它将错误输出(通常以红色输出的内容)写入标准错误流中呢?
我正在编写一个带有WPF和控制台界面的.NET应用程序,并使用System.Diagnostics.Process调用msbuild。我希望能够以某种方式区分向用户输出的错误信息。
除了在每一行中查找“error”或直接使用Microsoft.Build +自定义记录器之外,是否有更好的分离输出的方法呢?
请查看MSBUILD.EXE命令行参数页面,特别是consoleloggerparameters
开关。
您可以使用/clp:ErrorsOnly
仅在控制台输出中显示错误。
如果需要其余输出,请附带仅包含错误的文件日志。
/fl4 /flp4:errorsOnly;logfile=MSBuild.Errors.log
然后监视文件以获取新行。
我知道你说你想避免使用自定义日志记录器,但是...我也希望能够在标准错误输出中看到错误信息,发现编写自定义日志记录器并不那么痛苦——只需要一个类,一个方法和一条语句:
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);
};
}
}