【问题标题】:How to capture output of msbuild in a variable?如何在变量中捕获 msbuild 的输出?
【发布时间】: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


    【解决方案1】:

    您可以尝试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,日志会直接打印到控制台。

    【讨论】:

    • 谢谢,我不太明白如何使用ILogger来得到结果,请你提供一个示例代码sn-p
    • @EmilyWong 对不起,我似乎误解了你的问题。如果要获取输出路径,请查看这个问题stackoverflow.com/questions/26139757/…
    • 不,我不想要输出路径,我想要控制台标准输出。
    • @EmilyWong 请检查我的示例代码,看看它是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2021-09-27
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多