作为我们持续集成过程的一部分,我们非常广泛地使用MSBuild,虽然它非常强大,我们几乎可以在其中完成所有构建,测试和部署(利用一些自定义任务) - 我们发现调试它使用标签是一种痛苦,并不能总是为我们提供足够的信息。
我发现:http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/12/03/msbuild-debuggers.aspx,但遗憾的是该项目似乎已从Codeplex中消失。
有没有人知道是否有类似可用的东西,或者是否有其他方法/技术可以使用?
感谢。
答案 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