Как захватить вывод msbuild в переменную? - PullRequest
0 голосов
/ 03 января 2019

Я хочу получить вывод ниже в переменную, как я могу это сделать?

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

1 Ответ

0 голосов
/ 03 января 2019

Вы можете попробовать 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, журналы будут распечатываться непосредственно на консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...