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

9
我们在持续集成过程中广泛使用MSBuild,虽然它非常强大,我们几乎可以在其中完成所有的构建、测试和部署工作(利用一些自定义任务),但我们发现使用标记进行调试很麻烦,并且不能总是提供足够的信息。
我找到了这个链接:http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/12/03/msbuild-debuggers.aspx,但不幸的是,该项目似乎已经从Codeplex消失了。
是否有人知道是否有类似的东西可用或者是否有其他方法/技术可用?
谢谢。
5个回答

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()方法,它将允许你将MSBuild附加到Visual Studio中正在运行的调试器实例(希望已经加载了你的自定义任务)。

祝你好运!


相当详细?那简直是低估了,我用那个标志构建后得到了45k行的输出!好答案。 - Tim Abell

10

值得一提的是,还有一个未记录在案的调试器可以在VS 2010中使用,点击此处了解更多。


在MSBuild 17(VS 2022)中似乎无法正常工作... - Mike

3

1

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接