如何从 msbuild 获取构建日志?

How to get build log from msbuild?

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

if(IsRunningOnWindows())
{

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

  }

}

是否可以创建构建日志文件?

您可以使用 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));
    }
}

在下一个版本的 Cake (0.17.0) 中(希望我们在本周末发布)我们实现了这个 feature request which allows the usage of a new Extension Method which allows you to pass in an MSBuildFileLogger。此扩展方法将避免需要走 ArgumentCustomization 路线。

这应该允许您执行以下操作:

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

您今天可以使用 Cake 的 MyGet feed.

获取预发布 v0.17.0 版本的 Cake

如果您像 default bootstrapper 中那样使用 nuget CLI 安装 Cake,则将 -Source https://www.myget.org/F/cake/api/v3/index.json 添加到 nuget install 语句中。

然后:

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

  • 如果您只使用 Cake 包 ID 安装,那么您要么只添加 -PreRelease,它将从提要中获取最新版本,要么也指定 -Version 0.17.0-alpha009 参数.