2012-03-13 132 views
4

我有一堆從互聯網上下載的解決方案(codeplex等),我想構建它們並在DLL上運行一個工具。我想通過自動化來做到這一點。如何使用MsBuild API 4.0自動構建解決方案?

建議使用MSBuild API,因爲它可以很容易地獲取錯誤信息並操作MsBuild以獲取其他信息。不幸的是它很難記錄如此:

  1. 如何建立.sln文件(通過MSBuild API 4.0)?
  2. 如何捕獲錯誤信息? (我看到了一個關於如何將日誌輸出到控制檯的例子,但沒有找到文件的優惠碼)

謝謝!

回答

4

我發現,提供瞭解決方案上的計算器一個相關的問題:

running msbuild programmatically

接受的答案提供了良好的資源:

http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/ec95c513-f972-45ad-b108-5fcfd27f39bc/ 記錄建立與MSBuild的4.0的消息: http://www.go4answers.com/Example/building-solution-programatically-vs-5395.aspx

此外,msdn上有一個日誌使用示例:http://msdn.microsoft.com/en-us/library/microsoft.build.framework.ilogger.aspx

3

也許我失去了一些東西,但爲什麼它必須是MSBuild API這樣一個簡單的任務?

剛剛從你寫的什麼的問題,我認爲沒有必要使用API​​只是建立一個解決方案,並捕獲在一個文本文件的輸出。
您可以使用MSBuild命令行工具。

建設有MSBuild的一個解決方案是如此簡單:

%windir%\Microsoft.net\Framework\v4.0.30319\msbuild.exe MySolution.sln 

capture the output in a text file,你只需要補充一點:
(例如,從鏈接複製)

/l:FileLogger,Microsoft.Build;logfile=MyLog.log 

所以最後的聲明看起來像這樣:

%windir%\Microsoft.net\Framework\v4.0.30319\msbuild.exe MySolution.sln /l:FileLogger,Microsoft.Build;logfile=MyLog.log 

這將構建解決方案並將MSBuild的輸出保存在當前目錄中名爲MyLog.log的文本文件中。

+0

不夠公平,我知道如何通過運行命令行來實現,但爲了自動化目的,使用MSBuild API將提供更多的控制 - 例如,我打算稍後注入一些任務。 – 2012-03-14 08:51:24

+0

@Christian Specht - 因爲任何東西都向控制檯投擲是一種額外的複雜性,可以避免。 – StingyJack 2017-07-03 16:37:32

1

你所描述的任何東西都不需要使用MSBuild API。如果要擴展自定義構建任務的構建過程,使用MS構建API是值得的,但如果您只是想自動構建構建,則無用。該API有很好的文檔記錄。這裏有一個像MSDN文檔。 MSBuild API

要直接回答您的問題: 1)MSBuild不理解解決方案文件。這些是視覺工作室的概念。如果從命令行構建,MSBuild將「運行」一個解決方案文件,但它通過從解決方案文件生成一個msbuild文件來完成。通過直接運行頂層項目文件可以獲得相同的效果。

2)正如我的基督徒所說,你可以用記錄器來做到這一點。這裏的文檔:Build Logger

如果你想你的自動化構建,使用建立構建自動化環境像詹金斯或TeamCity的。

相關問題