如何从msbuild获取构建日志?

时间:2016-10-26 09:43:30

标签: c# msbuild cakebuild

我正在使用下面的代码在cake脚本中编译我的项目,我想在文本文件中获取构建日志。

if(IsRunningOnWindows())
{

  // Use MSBuild
  foreach(string currenproject in projectslocation)
  {
  MSBuild(currenproject, new MSBuildSettings()
  .SetConfiguration(configuration)
  .SetVerbosity(Verbosity.Minimal));

  }

}

这可以创建构建日志文件吗?

2 个答案:

答案 0 :(得分:5)

来到Cake的下一个版本(0.17.0)(希望我们在本周末发布)我们实现了这个feature request,它允许使用一个新的扩展方法,允许你通过在MSBuildFileLogger。此扩展方法将阻止进入ArgumentCustomization路由。

这应该允许你这样的事情:

MSBuild("./myproject.sln", new MSBuildSettings()
    .AddFileLogger(new MSBuildFileLogger {
        LogFile = "./errors.txt",
        MSBuildFileLoggerOutput = MSBuildFileLoggerOutput.ErrorsOnly   
});

今天你可以使用Cake的MyGet feed获得预发布的v0.17.0版本的Cake。

如果你正在使用nuget CLI来安装Cake,就像default bootstrapper中所做的那样,你将-Source https://www.myget.org/F/cake/api/v3/index.json添加到nuget install语句。

然后:

  • 如果您使用package.config固定Cake版本,请指定版本0.17.0-alpha0092或更高版本。

  • 如果仅使用Cake软件包ID进行安装,则只需添加-PreRelease即可从Feed中获取最新版本,也可以指定-Version 0.17.0-alpha009参数。< / p>

答案 1 :(得分:2)

您可以使用WithLogger(MSBuildSettings, ​string loggerAssembly, ​string loggerClass, ​string loggerParameters) MSBuildSettings扩展方法,该方法可用于指定自定义MSBuild日志记录。

目前没有可用的MSBuild标准文件记录器设置,但您仍然可以使用ArgumentCustomization使用该设置。

if(IsRunningOnWindows())
{
    DirectoryPath logPath = MakeAbsolute(Directory("./logfiles"));
    // Use MSBuild
    foreach(string currenproject in projectslocation)
    {
        FilePath logFile = logPath.CombineWithFilePath(string.Format(
                               "{0}.log",
                               currenproject));

        MSBuild(currenproject, new MSBuildSettings {
            ArgumentCustomization = args=>args.Append(
                "/flp:\"logfile={0};verbosity={1}\"",
                logFile.FullPath,
                Verbosity.Diagnostic
            )
        }.SetConfiguration(configuration)
        .SetVerbosity(Verbosity.Minimal));
    }
}