diff options
author | Eric St. John <ericstj@microsoft.com> | 2017-01-25 09:19:00 +0300 |
---|---|---|
committer | Eric St. John <ericstj@microsoft.com> | 2017-01-25 21:51:17 +0300 |
commit | 46fd630d59f0d996ad621bfd32d6d1fd46d8e3bc (patch) | |
tree | f07676a1b743e8206a3ad76553bb297824a9a892 /buildvertical.targets | |
parent | 3515bf85fe46eeba3322f782212e4023cb8a0ae6 (diff) |
Fix P2P reference Configuration selection
Previously we'd always choose Configuration for P2Ps based on
BuildConfiguration. This was incorrect and could result in netstandard
configurations building against netcoreapp references.
Fix this by doing configuration selection in the referencing project.
I've also added hooks to build all configurations. To do this from a
traversal set /p:BuildAllConfigurations=true. To do this from a project
build with /t:BuildAll.
Diffstat (limited to 'buildvertical.targets')
-rw-r--r-- | buildvertical.targets | 64 |
1 files changed, 46 insertions, 18 deletions
diff --git a/buildvertical.targets b/buildvertical.targets index baeb058c96..54aa29290b 100644 --- a/buildvertical.targets +++ b/buildvertical.targets @@ -15,7 +15,14 @@ <!-- find the best configuration for each project, projects that shouldn't build for this configuration return an empty item. --> <MSBuild Targets="FindBestConfiguration" - Projects="@(Project)"> + Projects="@(Project)" + Condition="'$(BuildAllConfigurations)' != 'true'"> + <Output TaskParameter="TargetOutputs" + ItemName="_ProjectBestConfigurations" /> + </MSBuild> + <MSBuild Targets="GetBuildConfigurations" + Projects="@(Project)" + Condition="'$(BuildAllConfigurations)' == 'true'"> <Output TaskParameter="TargetOutputs" ItemName="_ProjectBestConfigurations" /> </MSBuild> @@ -51,35 +58,56 @@ <_BestConfiguration Condition="'$(BuildConfigurations)' == ''">$(BuildConfiguration)</_BestConfiguration> </PropertyGroup> </Target> - - <!-- Runs in a leaf project (eg: csproj) to determine best configuration if one exists for purposes of project references --> - <Target Name="FindBestConfigurationForProjectReference" - DependsOnTargets="FindBestConfiguration" - Returns="$(_BestConfiguration)"> - <Error Condition="'$(_BestConfiguration)' == ''" Text="Could not find a configuration for $(BuildConfiguration) from $(BuildConfigurations)" /> + + <!-- Runs in a leaf project (eg: csproj) to determine all configurations --> + <Target Name="GetBuildConfigurations" + Returns="$(_AllBuildConfigurations)"> + <PropertyGroup> + <_AllBuildConfigurations>$(BuildConfigurations)</_AllBuildConfigurations> + <_AllBuildConfigurations Condition="'$(BuildConfigurations)' == ''">$(BuildConfiguration)</_AllBuildConfigurations> + </PropertyGroup> </Target> <!-- Runs in a leaf project (csproj) to determine best configuration for ProjectReferences --> <Target Name="AnnotateProjectReference" - BeforeTargets="BeforeResolveReferences"> + BeforeTargets="BeforeResolveReferences" + Condition="'@(ProjectReference)' != ''" + Inputs="%(ProjectReference.Identity)" + Outputs="unused"> - <!-- find the best configuration for each project, projects that do not have an - applicable configuration will fail the build. --> - <MSBuild Targets="FindBestConfigurationForProjectReference" + <!-- 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" ItemName="_ProjectReferenceBestConfigurations" /> + <Output TaskParameter="TargetOutputs" PropertyName="_projectReferenceBuildConfigurations" /> </MSBuild> + <!-- Find the best configuration for the current Project's Configuration --> + <FindBestConfiguration Properties="@(Property)" + PropertyValues="@(PropertyValue)" + BuildConfigurations="$(_ProjectReferenceBuildConfigurations)" + BuildConfiguration="$(Configuration)"> + <Output TaskParameter="BestConfiguration" PropertyName="_projectReferenceConfiguration" /> + </FindBestConfiguration> + + <Error Condition="'$(_projectReferenceConfiguration)' == ''" Text="Could not find a configuration for ProjectReference '@(ProjectReference)' from configurations '$(_projectReferenceBuildConfigurations)' when building '$(MSBuildProjectName)' for configuration '$(Configuration)' ." /> + <ItemGroup> - <!-- transform back to ProjectReference --> - <ProjectReferenceWithConfiguration Include="@(_ProjectReferenceBestConfigurations->'%(OriginalItemSpec)')"> - <AdditionalProperties>Configuration=%(Identity);%(_ProjectReferenceBestConfigurations.AdditionalProperties)</AdditionalProperties> - </ProjectReferenceWithConfiguration> + <ProjectReference> + <AdditionalProperties>Configuration=$(_projectReferenceConfiguration);%(ProjectReference.AdditionalProperties)</AdditionalProperties> + </ProjectReference> </ItemGroup> + </Target> + <Target Name="BuildAll"> <ItemGroup> - <ProjectReference Remove="@(ProjectReference)" /> - <ProjectReference Include="@(ProjectReferenceWithConfiguration)" /> + <_buildConfigurations Include="$(BuildConfigurations)" /> + <_buildConfigurations Condition="'@(_buildConfigurations)' == ''" Include="$(BuildConfiguration)" /> </ItemGroup> + + <MSBuild Projects="$(MSBuildProjectFullPath)" + Properties="Configuration=%(_buildConfigurations.Identity)" /> </Target> </Project>
\ No newline at end of file |