Fix ScopedCss incrementalism to detect CssScope metadata changes #52282
+125
−2
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
This PR fixes the ScopedCss build pipeline to properly regenerate scoped CSS files when the
CssScopemetadata changes.Problem
When users specify a custom
CssScopemetadata on their scoped CSS files (via<None Update="..." CssScope="custom-scope" />), changing that value did not trigger regeneration of the scoped CSS output. This was because MSBuild'sInputs/Outputsincrementalism only tracks file timestamps, not item metadata likeCssScope.Fixes #50646
Solution
Added
_CreateScopedCssScopeCachetarget - Creates a cache file containing allCssScopevalues usingWriteLinesToFilewithWriteOnlyWhenDifferent="true". This file only updates when scope values actually change.Updated
_ProcessScopedCssFilestarget - Added the cache file to the target'sInputs, so MSBuild's incrementalism detects when scopes change.Set
SkipIfOutputIsNewer="false"onRewriteCss- Since target-level incrementalism now correctly determines when to run, the task's internal timestamp check is disabled to avoid conflicts.Testing
Build_RegeneratesScopedCss_WhenCssScopeMetadataChangesthat verifies:CssScoperegenerates files with new scopeCssScopevalue regenerates files again