如何调试(最好在IDE中)MSBuild脚本?

Kie*_*ton 9 msbuild debugging continuous-integration build-process

作为我们持续集成过程的一部分,我们非常广泛地使用MSBuild,虽然它非常强大,我们几乎可以在其中完成所有构建,测试和部署(利用一些自定义任务) - 我们发现使用标签进行调试是一种痛苦,并不能总是为我们提供足够的信息.

我发现:http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/12/03/msbuild-debuggers.aspx,但遗憾的是该项目似乎已从Codeplex中消失.

有没有人知道是否有类似可用的东西或是否有其他方法/技术可以使用?

谢谢.

Aar*_*sen 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附加到调试器(希望已经加载了自定义任务的那个).

祝好运!


Roc*_*mas 10

值得一看的还有VS 2010 中的无证调试器.