Use the `JoinItems` task rather than faking it in an item group (#21349)

* Use the `JoinItems` task rather than faking it in an item group
  - speeds up the build and reduces the size of our binary logs
* !fixup! Remove duplicate `@(LatestPackageReference)` item for unit.extensibility.execution
  - `JoinItems` task a bit more finicky than previous cross-product hack
This commit is contained in:
Doug Bunting 2020-05-01 09:50:59 -07:00 committed by GitHub
parent 100823af0d
commit 14e7fcb713
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 26 deletions

View File

@ -182,7 +182,6 @@ and are generated based on the last package release.
<LatestPackageReference Include="xunit.assert" Version="$(XunitAssertPackageVersion)" /> <LatestPackageReference Include="xunit.assert" Version="$(XunitAssertPackageVersion)" />
<LatestPackageReference Include="xunit.extensibility.core" Version="$(XunitExtensibilityCorePackageVersion)" /> <LatestPackageReference Include="xunit.extensibility.core" Version="$(XunitExtensibilityCorePackageVersion)" />
<LatestPackageReference Include="xunit.extensibility.execution" Version="$(XunitExtensibilityExecutionPackageVersion)" /> <LatestPackageReference Include="xunit.extensibility.execution" Version="$(XunitExtensibilityExecutionPackageVersion)" />
<LatestPackageReference Include="xunit.extensibility.execution" Version="$(XunitExtensibilityExecutionPackageVersion)" />
<LatestPackageReference Include="Microsoft.Data.SqlClient" Version="$(MicrosoftDataSqlClientPackageVersion)" /> <LatestPackageReference Include="Microsoft.Data.SqlClient" Version="$(MicrosoftDataSqlClientPackageVersion)" />
</ItemGroup> </ItemGroup>

View File

@ -144,41 +144,40 @@
<UnusedBaselinePackageReference Include="@(BaselinePackageReference)" Exclude="@(Reference);@(_ProjectReferenceByAssemblyName);@(PackageReference)" /> <UnusedBaselinePackageReference Include="@(BaselinePackageReference)" Exclude="@(Reference);@(_ProjectReferenceByAssemblyName);@(PackageReference)" />
<!-- Only allow suppressing baseline changes in non-servicing builds. --> <!-- Only allow suppressing baseline changes in non-servicing builds. -->
<UnusedBaselinePackageReference Remove="@(SuppressBaselineReference)" Condition="'$(IsServicingBuild)' != 'true'"/> <UnusedBaselinePackageReference Remove="@(SuppressBaselineReference)" Condition="'$(IsServicingBuild)' != 'true'"/>
</ItemGroup>
<!-- <JoinItems Left="@(Reference)" Right="@(LatestPackageReference)" LeftMetadata="*" RightMetadata="Version"
MSBuild does not provide a way to join on matching identities in a Condition, Condition=" '$(UseLatestPackageReferences)' == 'true' ">
but you can do a cartesian product of two item groups and filter out mismatched id's in a second pass. <Output TaskParameter="JoinResult" ItemName="_LatestPackageReferenceWithVersion" />
--> </JoinItems>
<_LatestPackageReferenceWithVersion Include="@(Reference)" Condition=" '$(UseLatestPackageReferences)' == 'true' ">
<Id>%(LatestPackageReference.Identity)</Id>
<Version>%(LatestPackageReference.Version)</Version>
</_LatestPackageReferenceWithVersion>
<_LatestPackageReferenceWithVersion Remove="@(_LatestPackageReferenceWithVersion)" Condition="'%(Id)' != '%(Identity)' " />
<ItemGroup>
<!-- Remove reference items that have been resolved to a LatestPackageReference item. --> <!-- Remove reference items that have been resolved to a LatestPackageReference item. -->
<Reference Remove="@(_LatestPackageReferenceWithVersion)" />
<PackageReference Include="@(_LatestPackageReferenceWithVersion)" IsImplicitlyDefined="true" /> <PackageReference Include="@(_LatestPackageReferenceWithVersion)" IsImplicitlyDefined="true" />
<Reference Remove="@(_LatestPackageReferenceWithVersion)" />
</ItemGroup>
<!-- Resolve references from BaselinePackageReference for servicing builds. --> <!-- Resolve references from BaselinePackageReference for servicing builds in corner cases. May be unused. -->
<_BaselinePackageReferenceWithVersion Include="@(Reference)" Condition=" '$(IsServicingBuild)' == 'true' OR '$(UseLatestPackageReferences)' != 'true' "> <JoinItems Left="@(Reference)" Right="@(BaselinePackageReference)" LeftMetadata="*" RightMetadata="Version"
<Id>%(BaselinePackageReference.Identity)</Id> Condition=" '$(IsServicingBuild)' == 'true' OR '$(UseLatestPackageReferences)' != 'true' ">
<Version>%(BaselinePackageReference.Version)</Version> <Output TaskParameter="JoinResult" ItemName="_BaselinePackageReferenceWithVersion" />
</_BaselinePackageReferenceWithVersion> </JoinItems>
<_BaselinePackageReferenceWithVersion Remove="@(_BaselinePackageReferenceWithVersion)" Condition="'%(Id)' != '%(Identity)' " />
<ItemGroup>
<!-- Remove reference items that have been resolved to a BaselinePackageReference item. --> <!-- Remove reference items that have been resolved to a BaselinePackageReference item. -->
<PackageReference Include="@(_BaselinePackageReferenceWithVersion)" IsImplicitlyDefined="true" /> <PackageReference Include="@(_BaselinePackageReferenceWithVersion)" IsImplicitlyDefined="true" />
<Reference Remove="@(_BaselinePackageReferenceWithVersion)" /> <Reference Remove="@(_BaselinePackageReferenceWithVersion)" />
</ItemGroup>
<!-- For PrivateAssets=All references, like .Sources packages, fallback to LatestPackageReferences. --> <!-- For PrivateAssets=All references, like .Sources packages, fallback to LatestPackageReferences. -->
<_PrivatePackageReferenceWithVersion Include="@(Reference->WithMetadataValue('PrivateAssets', 'All'))"> <JoinItems Left="@(Reference->WithMetadataValue('PrivateAssets', 'All'))"
<Id>%(LatestPackageReference.Identity)</Id> Right="@(LatestPackageReference)"
<Version>%(LatestPackageReference.Version)</Version> LeftMetadata="*"
</_PrivatePackageReferenceWithVersion> RightMetadata="Version">
<Output TaskParameter="JoinResult" ItemName="_PrivatePackageReferenceWithVersion" />
<_PrivatePackageReferenceWithVersion Remove="@(_PrivatePackageReferenceWithVersion)" Condition="'%(Id)' != '%(Identity)' " /> </JoinItems>
<ItemGroup>
<!-- Remove reference items that have been resolved to a LatestPackageReference item. --> <!-- Remove reference items that have been resolved to a LatestPackageReference item. -->
<PackageReference Include="@(_PrivatePackageReferenceWithVersion)" IsImplicitlyDefined="true" /> <PackageReference Include="@(_PrivatePackageReferenceWithVersion)" IsImplicitlyDefined="true" />
<Reference Remove="@(_PrivatePackageReferenceWithVersion)" /> <Reference Remove="@(_PrivatePackageReferenceWithVersion)" />
@ -287,4 +286,4 @@
<Output TaskParameter="TargetOutputs" ItemName="_MSBuildProjectReferenceExistent" /> <Output TaskParameter="TargetOutputs" ItemName="_MSBuildProjectReferenceExistent" />
</MSBuild> </MSBuild>
</Target> </Target>
</Project> </Project>