9

似乎 msbuild 将所有输出(包括错误输出)写入标准输出。

有没有办法让它将错误输出(通常以红色输出)写入标准错误?

我正在编写一个带有 WPF 和控制台界面的 .NET 应用程序,并使用 System.Diagnostics.Process 调用 msbuild。我希望能够以某种方式区分错误输出给用户。

分离输出是否比在每一行中查找“错误”或直接使用 Microsoft.Build + 自定义记录器更好?

4

2 回答 2

11

查看MSBUILD.EXE 命令行参数页面。特别是consoleloggerparameters开关。

您可以使用/clp:ErrorsOnly仅在控制台输出中显示错误。

如果您需要输出的其余部分,请包含仅错误文件日志

/fl4 /flp4:errorsOnly;logfile=MSBuild.Errors.log

然后监视文件是否有新行。

于 2013-08-14T17:36:57.480 回答
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 添加到命令行以调用它。

于 2017-01-17T19:29:01.770 回答