2016-10-26 63 views
3

我正在使用下面的代碼編譯我的項目在蛋糕腳本中,並且我想讓生成日誌文本文件。如何從msbuild獲取構建日誌?

if(IsRunningOnWindows()) 
{ 

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

    } 

} 

這是可以創建生成日誌文件嗎?

回答

5

即將在蛋糕(0.17.0或更新)(希望這將我們在本週月底發佈)的下一個版本,我們實現了這個feature request它允許新的擴展方法的使用,讓您通過在MSBuildFileLogger。這種擴展方法將防止需要去參數定製路線。

這應該讓你喜歡的東西:

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

可以使用Cake的MyGet feed獲得蛋糕的預發佈版本v0.17.0今天。

如果您使用nuget CLI來安裝Cake,如所做的那樣,您可以將-Source https://www.myget.org/F/cake/api/v3/index.json添加到nuget install語句中。

然後:

  • 如果您使用的是package.config引腳蛋糕的版本,則指定0.17.0-alpha0092或更高版本。

  • 如果只安裝使用Cake包ID,那麼你要麼只是添加-PreRelease,它會從飼料獲取最新版本,或者也可以指定-Version 0.17.0-alpha009參數。

+0

這很棒! – devlead

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)); 
    } 
} 
+1

@vijay是你在找什麼?這是一個很好的問題,請評論任何不清楚的東西,我會盡力澄清。 – devlead