Team Build and Multiproc MSBuild

MSBuild is introducing a new feature in Orcas where projects can be built in parallel - see their team blog post for details.  Team Build has added support for this feature by:

  • Modifying Microsoft.TeamFoundation.Build.targets to build each configuration in parallel if possible,
     <MSBuild BuildInParallel="true"
             Projects="@(ConfigurationList)"
             Targets="CompileConfiguration"
             StopOnFirstFailure="$(StopOnFirstFailure)">
      <Output TaskParameter="TargetOutputs" ItemName="CompilationOutputs" />
    </MSBuild>

  • Modifying Microsoft.TeamFoundation.Build.targets to build each solution in parallel if possible, and
     <MSBuild BuildInParallel="true"
             Projects="@(SolutionList)"
             Targets="CompileSolution"
             StopOnFirstFailure="$(StopOnFirstFailure)">
      <Output TaskParameter="TargetOutputs" ItemName="CompilationOutputs" />
    </MSBuild>

  • Adding a MaxProcesses key to TfsBuildService.exe.config (typically installed to %ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies) that allows you to specify, for a given build machine, how many processes should be used when msbuild.exe is invoked.
     <!-- MaxProcesses
         Set this value to the maximum number of processes MSBuild.exe should
         use for builds started by agents hosted by this executable.
        -->
    <add key="MaxProcesses" value="1" />

By default, the MaxProcesses key is set to one, meaning that only a single process will be used for builds and no parallelization (is that actually a word?) will occur.  To use more than one process, set the key to your desired value and restart the team build service ("net stop vstfbuild" and then "net start vstfbuild" for you command-line people).  At this point, the magic will kick in and (hopefully) your builds will speed up quite a bit. 

There are some caveats here - MSBuild can manage your intra-solution dependencies (assuming you have used project references) to make sure to only build things in parallel which can be built in parallel.  If you have build order dependencies that are not specified via project references (e.g. inter-solution dependencies and/or file references) you should stick to a single process.

Comments

  • Anonymous
    June 20, 2007
    PingBack from http://www.universityupdate.com/technology/Microsoft_Visual_Studio/3324470.aspx
  • Anonymous
    June 21, 2007
    Brian Keller on New Team Test Case Studies: Hotmail.com and "March Madness". Roy Osherove on Get latest...
  • Anonymous
    July 20, 2007
    While some of the build agent properties are available in the VS GUI, buried in the tfsbuildservice.exe.config
  • Anonymous
    July 20, 2007
    While some of the build agent properties are available in the VS GUI, buried in the tfsbuildservice.exe
  • Anonymous
    June 26, 2008
    With Visual Studio Team Build 2008 there is no way to run two builds from within the same Team Project
  • Anonymous
    July 09, 2008
    TeamBuild can build one build definition from a single Team Project at a time. can run multiple build
  • Anonymous
    February 09, 2009
    There are a number of things you can do to improve build performance in TFS 2008: Reduce the scope of