如何在变量中捕获msbuild的输出?

时间:2019-01-03 03:31:21

标签: c# visual-studio msbuild

我想将以下内容输出到变量中,该怎么办?

var proj = System.Xml.XmlReader.Create(args[1]);
var msbuild = new Microsoft.Build.Evaluation.Project(proj);
msbuild.Build();

1 个答案:

答案 0 :(得分:0)

您可以尝试public bool Build (Microsoft.Build.Framework.ILogger logger);使用记录器进行构建并从中获取输出。 检查此方法以使用记录器:https://docs.microsoft.com/en-us/dotnet/api/microsoft.build.framework.ilogger?view=netframework-4.7.2

编辑:添加示例代码

创建自定义记录器:

public class ExtendLogger : Microsoft.Build.Logging.ConsoleLogger
{
    private string savedLog;

    public ExtendLogger(): base()
    {
        base.WriteHandler = this.SaveLog;
    }

    void SaveLog(string message)
    {
        savedLog += message;
    }

    public string GetLog()
    {
        return savedLog;
    }
}

并在您的代码中使用它:

var proj = System.Xml.XmlReader.Create(args[1]);
var msbuild = new Microsoft.Build.Evaluation.Project(proj);
var logger = new ExtendLogger();
bool result = msbuild.Build(logger);
string logString = logger.GetLog();
Console.WriteLine("Build success?: " + result.ToString());
Console.WriteLine(logString );
Console.ReadKey();

如果使用Microsoft.Build.Logging.ConsoleLogger,则日志将直接打印到控制台。