Repository navigation
Fix/tfm floor and mirrored file tracking - #36
Merged
Merged
Conversation
A project declaring TargetFrameworks in its body opts out of the curated set resolution, but the last-resort floor further down Sdk.props still fired: the body has not been evaluated at that point, so both TFM properties still read empty. The project then carried TargetFramework set to the Current set alongside its own list, and MSBuild honours the singular property - so it quietly built a single target and every multi-targeting consumer failed with "Project 'X' targets 'net10.0'. It cannot be referenced by a project that targets '.NETCoreApp,Version=v9.0'". The floor now stands down for the same declaration the set resolution stands down for. A project's own PurviewTargetFrameworkSet also wins over one the repository selected. The selection is read out of the project XML precisely so a project can make it, but it was then applied only when nothing had been inherited, so a repository-wide choice silently overrode it - the opposite of the documented narrowest-first layering.
Git applies ignore rules only to untracked paths, so a mirrored file that is tracked - usually committed before the SDK began ignoring mirrored files per file - is never ignored. Every upgrade that changes it rewrites it and it shows up as a local modification, which reads as the SDK dirtying the working tree. The repository has to untrack it once and the SDK cannot do that for it, so it now reports PurviewTrackedMirroredFile naming the paths and the `git rm --cached` command. DisableMirroredFileTrackingCheck=true opts out. The check only runs on a build that actually mirrored something - both the moment the churn appears and the moment the advice applies - so an up-to-date build spawns no git process. Also guards the agent-sync manifest read-merge-write with a cross-process named mutex. Every project and both mirror targets rewrite the whole manifest from their own change groups plus whatever they read of the others, so unsynchronised writers drop each other's groups and the generated .gitignore under-covers. This narrows that window; it does not close it entirely. The harness gains RunGitAsync and clears read-only attributes before deleting a work directory, which a `git init` leaves behind.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
No description provided.