如何调试(最好在IDE中)MSBuild脚本? [英] How can I debug (preferably in an IDE) an MSBuild script?
问题描述
我发现: http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/12/03/ msbuild-debuggers.aspx ,但遗憾的是该项目似乎从Codeplex中消失了。
有人有任何想法,如果有什么类似的可用或如果有另一种方式/技术可以使用?
谢谢。
我使用 / v:diagnostic
命令行开关。 MSBuild吐出一些相当详细的输出。您还可以使用 / fl [n]
命令行开关将详细输出吐出到日志文件而不是控制台,然后使用 / flp [n]
(filelogparameter)切换指定详细程度级别,例如 /flp:Verbosity=diagnostic;LogFile=latest_diagnostic.log
/ p>
您必须从头开始设计构建脚本,从而使故障排除更容易。执行以下操作:
尽可能使每个目标尽可能细致,因此您可以单独调用每个目标。这有助于使调试过程更快。
确保您的任务继承自 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的实例(希望有你的自定义任务已经加载)。
祝你好运!
We use MSBuild quite extensively as part of our continuous integration process, and whilst it is incredibly powerful and we can do practically all of our build, test and deployment within it (utilising some custom tasks) - we've found that debugging it using tags is a pain and cannot always provide us with enough information.
I've found: http://www.wintellect.com/CS/blogs/jrobbins/archive/2007/12/03/msbuild-debuggers.aspx, but unfortunately the project seems to have disappeared from Codeplex.
Does anyone have any idea if there is something similar to this available or if there is another way/technique that can be used?
Thanks.
I use the /v:diagnostic
command-line switch. MSBuild spits out some pretty verbose output. You can also spit the verbose output to a log file instead of the console, using the /fl[n]
command line switch, and then use the /flp[n]
(filelogparameter) switch to specify the verbosity level, e.g., /flp:Verbosity=diagnostic;LogFile=latest_diagnostic.log
You have to design your build scripts from the start to make troubleshooting easier. Do things like:
Make each target as granular as possible, so you can call each target individually. This helps make the debugging process much quicker.
Make sure your tasks inherit from the Microsoft.Build.Utilities.Task
class. It exposes a Log property that has way too many logging functions. I typically err on the side of caution use the LogMessage(MessageImportance,string,params object[])
. My debugging messages get a message importance of MessageImportance.Low
so they only appear when the verbosity mode is diagnostic.
Use System.Diagnostics.Trace.WriteLine
for outputting messages that are are too low-level to log. I use DebugView to look at those messages.
Lastly, try not to do really complicated things in the MSBuild script itself. MSBuild excels at managing dependencies, lists of files, and running tasks. Anything more complicated or advanced should be moved to custom tasks written in your .NET language of choice. This has the added benefit of making things much easier to debug. When you've got your logic in code, you can use System.Diagnostics.Debugger.Launch()
method, which will allow you to attach MSBuild to the debugger in a running instance of Visual Studio (hopefully one that has your custom task already loaded).
Good luck!
这篇关于如何调试(最好在IDE中)MSBuild脚本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!