如何调试msbuild?
Contents
有没有想过调试msbuild
呢?可以参考Debugging MSBuild script with Visual Studio,part2,part3。
前期准备工作
- 修改注册表,在键值
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\4.0
下添加String Value
,名字是 DebuggerEnabled,值是true。(注意区分32位和64位,我给出的例子是32位的) - 在命令行运行
msbuild /?
,可以看到多了一个/debug
的选项,它的解释是:Causes a debugger prompt to appear immediately so that Visual Studio can be attached for you to debug the MSBuild XML and any tasks and loggers it uses.
- 确认Visual Studio是exception handler。就是确认注册表的
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
的值是vsjitdebugger.exe -p %ld -e %ld
。或者直接在命令行运行vsjitdebugger.exe /regserver
。
编译单个项目
在命令行运行msbuild /t:rebuild /debug Demo.csproj
就会在刚刚启动msbuild
时弹出Visual Studio的Attach窗口,接着就能F10,F11一步步的看.csproj
这个文件是怎么执行的了,还可以在Locals窗口看到局部变量的值。
编译整个solution
- 生成
*.sln.metaproj
文件。
因为msbuild
缺省不支持编译sln
,我们需要首先设置环境变量set MSBUILDEMITSOLUTION=1
,这样用msbuild
编译sln
时就会生成一个*.sln.metaproj
的文件。 - 在命令行运行
msbuild /t:rebuild /debug Demo.sln.metaproj
就可以编译整个solution了,可以在每一个项目文件的开头打上断点看编译是怎么执行的。