diff options
author | Eric St. John <ericstj@microsoft.com> | 2017-01-27 11:20:13 +0300 |
---|---|---|
committer | Eric St. John <ericstj@microsoft.com> | 2017-01-30 01:27:26 +0300 |
commit | 33f796c26a78b1ecb7185df0129948cacfb0fe77 (patch) | |
tree | 91820bffee43d3112c7d2fbd1b6d14d30617cd96 /buildvertical.targets | |
parent | 79ea452ea1cdb378dbae1c8e3890534d7662f6d2 (diff) |
Add support multiple BuildConfigurations
This enables building more than one BuildConfiguration at a time.
I enabled this in the references to ensure we build netstandard references in addition to
the current BuildConfiguration.
Diffstat (limited to 'buildvertical.targets')
-rw-r--r-- | buildvertical.targets | 68 |
1 files changed, 36 insertions, 32 deletions
diff --git a/buildvertical.targets b/buildvertical.targets index 6fdef292ec..e0ea7af264 100644 --- a/buildvertical.targets +++ b/buildvertical.targets @@ -8,56 +8,64 @@ <!-- Import configuration data model --> <Import Project="$(MSBuildThisFileDirectory)src/Tools/GenerateProps/properties.props" /> - <!-- Runs during traversal to select which projects and configurations of those projects to build --> - <Target Name="FilterProjects"> - - <!-- find the best configuration for each project, projects that shouldn't build for this configuration - return an empty item. --> - <MSBuild Targets="FindBestConfiguration" - Projects="@(Project)" - Condition="'$(BuildAllConfigurations)' != 'true'"> - <Output TaskParameter="TargetOutputs" - ItemName="_ProjectBestConfigurations" /> - </MSBuild> + <!-- Runs during traversal when BuildAllConfigurations is set to expand each project + to a seperate instance for each of its BuildConfigurations --> + <Target Name="ExpandAllBuildConfigurations" + Condition="'$(BuildAllConfigurations)' == 'true'"> <MSBuild Targets="GetBuildConfigurations" Projects="@(Project)" Condition="'$(BuildAllConfigurations)' == 'true'"> <Output TaskParameter="TargetOutputs" - ItemName="_ProjectBestConfigurations" /> + ItemName="_projectBuildConfigurations" /> </MSBuild> <ItemGroup> <!-- transform back to project --> - <ProjectWithConfiguration Include="@(_ProjectBestConfigurations->'%(OriginalItemSpec)')"> + <_ProjectWithConfiguration Include="@(_projectBuildConfigurations->'%(OriginalItemSpec)')"> <AdditionalProperties>Configuration=%(Identity);%(_ProjectBestConfigurations.AdditionalProperties)</AdditionalProperties> - </ProjectWithConfiguration> + </_ProjectWithConfiguration> </ItemGroup> <ItemGroup> <Project Remove="@(Project)" /> - <Project Include="@(ProjectWithConfiguration)" /> + <Project Include="@(_ProjectWithConfiguration)" /> </ItemGroup> </Target> - <!-- Runs in a leaf project (eg: csproj) to determine best configuration if one exists for purposes of filtering --> - <Target Name="FindBestConfiguration" - Returns="$(_BestConfiguration)"> + <!-- Runs during traversal to select which projects and configurations of those projects to build + Batches over the projects because we need to treat BuildConfigurations as a Property + as well as copy the Project based on results of FindBestConfigurations. --> + <Target Name="FilterBuildConfiguration" + Condition="'$(BuildAllConfigurations)' != 'true'" + Inputs="%(Project.Identity)" + Outputs="unused"> + + <MSBuild Targets="GetBuildConfigurations" + Projects="@(Project)"> + <Output TaskParameter="TargetOutputs" + PropertyName="_projectBuildConfigurations" /> + </MSBuild> - <!-- if BuildConfigurations is defined, find the best one --> - <FindBestConfigurations Condition="'$(BuildConfigurations)' != ''" - Properties="@(Property)" + <FindBestConfigurations Properties="@(Property)" PropertyValues="@(PropertyValue)" - SupportedConfigurations="$(BuildConfigurations)" + SupportedConfigurations="$(_projectBuildConfigurations)" Configurations="$(BuildConfiguration)"> - <Output TaskParameter="BestConfigurations" PropertyName="_BestConfiguration" /> + <Output TaskParameter="BestConfigurations" ItemName="_projectBestConfigurations" /> </FindBestConfigurations> - <!-- if BuildConfigurations is not defined, use BuildConfiguration --> - <PropertyGroup> - <_BestConfiguration Condition="'$(BuildConfigurations)' == ''">$(BuildConfiguration)</_BestConfiguration> - </PropertyGroup> + <ItemGroup> + <!-- Apply configuration, this does a catesian product between @(Project) and @(_projectBestConfigurations) --> + <_projectWithConfiguration Include="@(Project)" Condition="'@(_projectBestConfigurations)' != ''"> + <AdditionalProperties>Configuration=%(_projectBestConfigurations.Identity);%(_projectWithConfiguration.AdditionalProperties)</AdditionalProperties> + </_projectWithConfiguration> + <Project Remove="@(Project)"/> + <Project Include="@(_projectWithConfiguration)"/> + </ItemGroup> </Target> - + + <Target Name="FilterProjects" + DependsOnTargets="ExpandAllBuildConfigurations;FilterBuildConfiguration" /> + <!-- Runs in a leaf project (eg: csproj) to determine all configurations --> <Target Name="GetBuildConfigurations" Returns="$(_AllBuildConfigurations)"> @@ -74,10 +82,6 @@ Inputs="%(ProjectReference.Identity)" Outputs="unused"> - <!-- Get all configurations for each ProjectReference. We use this - rather than the FindBestConfiguration target since we need to - choose the best configuration for the referencing project's - configuration, not the BuildConfiguration. --> <MSBuild Targets="GetBuildConfigurations" Projects="@(ProjectReference)"> <Output TaskParameter="TargetOutputs" PropertyName="_projectReferenceBuildConfigurations" /> |