Orcas Changes

The March CTP of Orcas is now available (Buck has a post on this here), and with it comes your first chance to play around with the new and improved Team Build.  I'm pretty excited about the changes in the build process (defined in Microsoft.TeamFoundation.Build.targets), so I figured I'd mention some of them:

  • We've added hooks (targets which can be overridden) to allow executing custom logic before/after the compilation of individual configurations (BeforeCompileConfiguration and AfterCompileConfiguration, respectively) and before/after the compilation of individual solutions (BeforeCompileSolution and AfterCompileSolution, respectively).  In V1 the only available hook was before/after everything was compiled (BeforeCompile and AfterComile, respectively) - these targets are still available as well. 
  • We've added the ability to pass custom properties into your solutions when they are built.  This can be done either for every solution, using the $(CustomPropertiesForBuild) property; or for individual solutions, using the Properties metadata in the SolutionToBuild item group.
  • We've added "convenience" properties for doing incremental gets and incremental builds, called (strangely enough) $(IncrementalGet) and $(IncrementalBuild).  Setting them to true will make all the changes necessary to do an incremental get or build, respectively.  In V1, it was not possible to make a distinction between these two choices, since the Clean target wiped out all sources, rather than just deleting binaries.
  • We've added the ability to retrieve the list of files gotten, replaced and deleted by the Get task.  Just set the $(GetPopulateOutput) property to true, and three item groups named Gets, Replaces, and Deletes will be populated when the Get task executes.
  • All the properties of the build will now be available to the build script, thanks to the inclusion of a new task called GetBuildProperties, which is executed right at the beginning of the build process. 
  • All the settable properties of the build can now be set at any point using another new task called SetBuildProperties.
  • A final new task, called BuildStep, can be used to insert and update build steps during the course of the build without having to write a custom task. 
  • Output directories can be customized for individual solutions and even for individual projects within your solutions.  I'll do another post at some point illustrating this in greater depth.
  • For you VC++ developers, we've provided "pass-through" properties for all the VCBuild task properties, including: $(VCBuildAdditionalLibPaths), $(VCBuildAdditionalOptions), $(VCBuildToolPath), and $(VCBuildUseEnvironment).  Hopefully this will allow folks to accomplish what they need with VCBuild without having to specify everything as crazy escaped XML in the $(AdditionalVCOverrides) property!

There are lots of other changes as well (including Continuous Integration support, scheduled builds, build queueing, an Object Model, etc.), but these are the MSBuild-related highlights.  We're really excited about this new version and look forward to getting your feedback on it!