【发布时间】:2019-01-03 03:31:20
【问题描述】:
我想把下面的输出变成一个变量,我该怎么做?
var proj = System.Xml.XmlReader.Create(args[1]);
var msbuild = new Microsoft.Build.Evaluation.Project(proj);
msbuild.Build();
【问题讨论】:
标签: c# visual-studio msbuild
我想把下面的输出变成一个变量,我该怎么做?
var proj = System.Xml.XmlReader.Create(args[1]);
var msbuild = new Microsoft.Build.Evaluation.Project(proj);
msbuild.Build();
【问题讨论】:
标签: c# visual-studio msbuild
您可以尝试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,日志会直接打印到控制台。
【讨论】: