Fix compiler references when building inside VS #54614
Merged
+1
−0
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.
If for a source project a contract project exists, then the contract project's TargetPath should be passed to the compiler. This is handled by the SDK by default when
ProduceReferenceAssembly
is true. As dotnet/runtime doesn't use theProduceReferenceAssembly
feature yet, a custom target adds the necessaryReferenceAssembly
metadata to theTargetPathWithTargetPlatformMoniker
item which then is transformed to references for the compiler. That works fine on the CLI as theGetTargetPathWithTargetPlatformMoniker
target runs after the ProjectReference to the ContractProject is resolved and its target path is available.Inside VS the target ordering is different and the
ResolvedMatchingContract
item was empty as the ProjectReference to the contract wasn't yet resolved. The fix for that is to add a dependency onto theResolveProjectReferences
target to guarantee that theResolvedMatchingContract
item is populated in time.Noticed this when the build of System.ComponentModel.Composition.Registration failed because the implementation assembly of System.ComponentModel.Composition was passed to the compiler instead of the reference assembly.