我使用/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附加到調試器(希望你的自定義任務已經加載了)。
祝你好運!
謝謝,很好的建議。 – 2009-11-05 16:56:06
很詳細?這是一個輕描淡寫的問題,我用這個標記得到了我的構建的45k行輸出!好答案。 – 2011-05-25 12:45:25