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

时间:2009-11-05 11:11:33

标签: debugging msbuild build-process continuous-integration

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

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

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

感谢。

5 个答案:

答案 0 :(得分:12)

我使用/v:diagnostic命令行开关。 MSBuild吐出一些非常详细的输出。您还可以使用/fl[n]命令行开关将详细输出吐出到日志文件而不是控制台,然后使用/flp[n](filelogparameter)开关指定详细级别,例如{{ 1}}

您必须从一开始就设计构建脚本,以便更轻松地进行故障排除。做的事情如下:

使每个目标尽可能精细,这样您就可以单独调用每个目标。这有助于更快地调试过程。

确保您的任务继承自/flp:Verbosity=diagnostic;LogFile=latest_diagnostic.log类。它公开了一个具有太多日志记录功能的Log属性。我通常谨慎使用Microsoft.Build.Utilities.Task。我的调试消息的消息重要性为LogMessage(MessageImportance,string,params object[]),因此它们仅在详细模式为诊断时出现。

使用MessageImportance.Low输出太低而无法记录的消息。我使用DebugView来查看这些消息。

最后,尽量不要在MSBuild脚本本身做很复杂的事情。 MSBuild擅长管理依赖项,文件列表和运行任务。任何更复杂或更高级的东西都应该转移到用您选择的.NET语言编写的自定义任务中。这样做的另一个好处是可以使很多更容易调试。当您在代码中获得逻辑时,可以使用System.Diagnostics.Trace.WriteLine方法,这将允许您在运行的Visual Studio实例中将MSBuild附加到调试器(希望已经加载了自定义任务的那个)。 / p> 祝你好运!

答案 1 :(得分:10)

值得一看VS 2010中的undocumented debugger

答案 2 :(得分:3)

如果您使用MSBuild或更高版本,则可以在Visual Studio中单步执行MSBuild 4.0脚本。

这是一个简单的注册表更改,然后在运行/debug时进行MSBuild切换。

请点击此处查看完整演练:http://blogs.msdn.com/b/visualstudio/archive/2010/07/06/debugging-msbuild-script-with-visual-studio.aspx

答案 3 :(得分:1)

您还可以查看优秀的商业应用(14天试用版)MSBuild Sidekick at Attrice Corp来调试您的MSBuild脚本。

答案 4 :(得分:0)

如果您使用自定义任务,则可以使用此方法:How To: Debug a custom MSBuild task using Visual Studio