我找到了这个链接:http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/12/03/msbuild-debuggers.aspx,但不幸的是,该项目似乎已经从Codeplex消失了。
是否有人知道是否有类似的东西可用或者是否有其他方法/技术可用?
谢谢。
我使用/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()
方法,它将允许你将MSBuild附加到Visual Studio中正在运行的调试器实例(希望已经加载了你的自定义任务)。
祝你好运!