Fix compression input file resolution for esproj assets #52283
+187
−12
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
When compressing static web assets from esproj projects, the compression task incorrectly used the
.esprojproject file as the input instead of the actual JavaScript asset file. This resulted in compressed files (.gz/.br) containing XML content instead of compressed JavaScript.Root Cause
The
TryFindInputFilePathmethod inAssetToCompress.cscheckedRelatedAssetOriginalItemSpecbeforeRelatedAsset. The esproj SDK has a bug whereOriginalItemSpecgets set to the project file path instead of the asset file path (due to referencing%(CandidatePublishAssets.Identity)instead of%(CandidateBuildAssets.Identity)in theGetCurrentProjectBuildStaticWebAssetItemstarget).Fix
This PR changes the order of checks in
TryFindInputFilePathto preferRelatedAsset(the asset's Identity path) overRelatedAssetOriginalItemSpec.RelatedAssetcontains the correct file path even whenOriginalItemSpecis incorrect.Symptoms this fixes
.gz/.br) containing XML content of.esprojfile instead of compressed JavaScriptTesting
Added unit tests to verify:
RelatedAssetis preferred when both paths existRelatedAssetOriginalItemSpecwhenRelatedAssetdoesn't existAll existing tests continue to pass.
#Fixes #50987