Contents
  1. 1. 前期准备工作
  2. 2. 编译单个项目
  3. 3. 编译整个solution

有没有想过调试msbuild呢?可以参考Debugging MSBuild script with Visual Studiopart2part3

前期准备工作

  1. 修改注册表,在键值HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\4.0下添加String Value,名字是 DebuggerEnabled,值是true。(注意区分32位和64位,我给出的例子是32位的)
  2. 在命令行运行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.  
    
  3. 确认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

  1. 生成*.sln.metaproj文件。
    因为msbuild缺省不支持编译sln,我们需要首先设置环境变量set MSBUILDEMITSOLUTION=1,这样用msbuild编译sln时就会生成一个*.sln.metaproj的文件。
  2. 在命令行运行msbuild /t:rebuild /debug Demo.sln.metaproj就可以编译整个solution了,可以在每一个项目文件的开头打上断点看编译是怎么执行的。
Contents
  1. 1. 前期准备工作
  2. 2. 编译单个项目
  3. 3. 编译整个solution