2009-11-05 13 views
9

我們使用MSBuild作爲我們持續集成過程的一部分,雖然它非常強大,並且我們幾乎可以完成其中的所有構建,測試和部署(利用一些自定義任務) - 我們發現它調試它使用標籤是一種痛苦,並不總能爲我們提供足夠的信息。如何調試(最好在IDE中)MSBuild腳本?

我找到了:http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/12/03/msbuild-debuggers.aspx,但不幸的是這個項目似乎已經從Codeplex中消失了。

有沒有人有任何想法,如果有類似的東西可用,或者如果有另一種方式/技術可以使用?

謝謝。

回答

12

我使用/v:diagnostic命令行開關。 MSBuild吐出一些相當詳細的輸出。您也可以吐詳細輸出到一個日誌文件,而不是控制檯,使用/fl[n]命令行開關,然後用/flp[n](filelogparameter)開關指定詳細級別,例如,/flp:Verbosity=diagnostic;LogFile=latest_diagnostic.log

你必須設計您的從一開始就構建腳本以簡化故障排除。執行如下操作:

使每個目標儘可能細化,以便您可以分別調用每個目標。這有助於使調試過程更快。

確保您的任務繼承自Microsoft.Build.Utilities.Task類。它暴露了Log屬性,它具有太多的日誌記錄功能。我通常在謹慎方面使用LogMessage(MessageImportance,string,params object[])。我的調試消息顯示消息的重要性爲MessageImportance.Low,因此只有在詳細模式爲診斷時纔會顯示。

使用System.Diagnostics.Trace.WriteLine用於輸出過低的日誌消息。我使用DebugView來查看這些消息。

最後,儘量不要在MSBuild腳本本身做很複雜的事情。 MSBuild擅長管理依賴項,文件列表和正在運行的任務。任何更復雜或更高級的應該轉移到用您選擇的.NET語言編寫的自定義任務。這有更多的好處,使很多更容易調試。當你的代碼中有邏輯時,你可以使用System.Diagnostics.Debugger.Launch()方法,它允許你在運行Visual Studio的實例中將MSBuild附加到調試器(希望你的自定義任務已經加載了)。

祝你好運!

+0

謝謝,很好的建議。 – 2009-11-05 16:56:06

+0

很詳細?這是一個輕描淡寫的問題,我用這個標記得到了我的構建的45k行輸出!好答案。 – 2011-05-25 12:45:25