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

Debugging 如何调试(最好在IDE中)MSBuild脚本?,debugging,msbuild,build-process,continuous-integration,Debugging,Msbuild,Build Process,Continuous Integration,作为持续集成过程的一部分,我们广泛使用MSBuild,虽然它功能强大,我们几乎可以在其中完成所有的构建、测试和部署(使用一些自定义任务),但我们发现使用标记调试它是一件痛苦的事,并且不能始终为我们提供足够的信息 我发现:,但不幸的是,这个项目似乎已经从Codeplex中消失了 有没有人知道是否有类似的东西可用,或者是否有其他方法/技术可以使用 谢谢。我使用/v:diagnostic命令行开关。MSBuild输出了一些非常详细的输出。您还可以使用/fl[n]命令行开关将详细输出吐到日志文件而不是控

作为持续集成过程的一部分,我们广泛使用MSBuild,虽然它功能强大,我们几乎可以在其中完成所有的构建、测试和部署(使用一些自定义任务),但我们发现使用标记调试它是一件痛苦的事,并且不能始终为我们提供足够的信息

我发现:,但不幸的是,这个项目似乎已经从Codeplex中消失了

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


谢谢。

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

您必须从一开始就设计构建脚本,以简化故障排除。做以下事情:

使每个目标尽可能细化,以便可以单独调用每个目标。这有助于加快调试过程

确保任务继承自Microsoft.Build.Utilities.Task类。它公开了一个日志属性,该属性有太多的日志函数。我通常会出于谨慎使用
日志消息(MessageImportance,string,params object[])
。我的调试消息的消息重要性为
MessageImportance.Low
,因此它们仅在详细模式为诊断模式时出现

使用
System.Diagnostics.Trace.WriteLine
输出级别太低而无法记录的消息。我过去常常看那些信息

最后,尽量不要在MSBuild脚本本身中执行非常复杂的操作。MSBuild擅长管理依赖项、文件列表和运行任务。任何更复杂或更高级的任务都应该转移到用您选择的.NET语言编写的自定义任务中。这还有一个额外的好处,就是使调试变得更加容易。在代码中包含逻辑后,可以使用
System.Diagnostics.Debugger.Launch()
方法,这将允许您将MSBuild附加到Visual Studio正在运行的实例中的调试器(最好是已加载自定义任务的实例)


祝你好运

您还可以看看优秀的商业应用程序(试用14天)来调试MSBuild脚本

如果您使用的是自定义任务,那么可以使用这种方法:

也值得一看VS 2010中的脚本。

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

这是一个简单的注册表更改,然后在运行
MSBuild
时执行
/debug
开关


有关完整的演练,请参见此处:

非常详细?这是一个轻描淡写的说法,我有45k行的输出从我的建立与该标志!回答得好。