Use documented item group in FindInvalidProjectReferences #10220
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.
Context
Today,
GetReferenceTargetPlatformMonikers
andFindInvalidProjectReferences
useTargetPathWithTargetPlatformMoniker
instead of the documented_ProjectReferenceTargetPlatformMonikers
item group for the project reference gathering/validation.This causes a violation in the ProjectReference protocol, leading to multiple items being returned from
GetTargetPath
and the default (Build
) target. Returning multiple items from these targets can cause usability problems and unexpected behaviors.Below is a simplified use case of the one that hit this bug:
A/A.csproj:
B/B.csproj:
C/C.csproj
C/Program.cs
Changes Made
Use the documented item group instead of reusing
TargetPathWithTargetPlatformMoniker
.Testing
Local hacking. I'd like to add an end-to-end test, but I'm not sure where is the best place to do so here.
Notes
This was discovered in a project that uses the Microsoft.WindowsAppSdk, which sets
FindInvalidProjectReferences
totrue
in some scenarios.The user was able to work around this bug by changing the order of the
ProjectReference
items in their equivalent ofC.csproj
.