dir.traversal.targets (37 lines of code) (raw):

<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build"> <PropertyGroup> <BuildInParallel Condition="'$(BuildInParallel)' == ''">true</BuildInParallel> </PropertyGroup> <Target Name="BuildAllProjects"> <!-- To Serialize we use msbuild's batching functionality '%' to force it to batch all similar projects with the same identity however since the project names are unique it will essentially force each to run in its own batch --> <MSBuild Targets="Build" Projects="@(Project)" Condition="'$(SerializeProjects)'=='true'" Properties="Dummy=%(Identity)"/> <MSBuild Targets="Build" Projects="@(Project)" Condition="'$(SerializeProjects)'!='true'" BuildInParallel="$(BuildInParallel)" /> </Target> <Target Name="CleanAllProjects"> <!-- To Serialize we use msbuild's batching functionality '%' to force it to batch all similar projects with the same identity however since the project names are unique it will essentially force each to run in its own batch --> <MSBuild Targets="Clean" Projects="@(Project)" Condition="'$(SerializeProjects)'=='true'" Properties="Dummy=%(Identity)"/> <MSBuild Targets="Clean" Projects="@(Project)" Condition="'$(SerializeProjects)'!='true'" BuildInParallel="$(BuildInParallel)" /> </Target> <Target Name="TestAllProjects"> <!-- MSBuild tests must be sequential --> <MSBuild Targets="Test" Projects="@(Project)" BuildInParallel="false" /> </Target> <PropertyGroup> <TraversalBuildDependsOn> BuildAllProjects; $(TraversalBuildDependsOn); </TraversalBuildDependsOn> <TraversalCleanDependsOn> CleanAllProjects; $(TraversalCleanDependsOn); </TraversalCleanDependsOn> <TraversalTestDependsOn> TestAllProjects; $(TraversalTestDependsOn); </TraversalTestDependsOn> </PropertyGroup> <Target Name="Build" DependsOnTargets="$(TraversalBuildDependsOn)" /> <Target Name="Clean" DependsOnTargets="$(TraversalCleanDependsOn)" /> <Target Name="Test" DependsOnTargets="$(TraversalTestDependsOn)" /> <Target Name="BuildAndTest" DependsOnTargets="Build;Test" /> <Target Name="Rebuild" DependsOnTargets="Clean;Build" /> <Target Name="RebuildAndTest" DependsOnTargets="Rebuild;Test" /> </Project>