|
76 | 76 | <_AllowedExplicitPackageReference Include="FSharp.Core" Condition="'$(MSBuildProjectExtension)' == '.fsproj'" />
|
77 | 77 | <_ExplicitPackageReference Include="@(PackageReference)" Exclude="@(_ImplicitPackageReference);@(_AllowedExplicitPackageReference)" />
|
78 | 78 |
|
79 |
| - <_UnusedProjectReferenceProvider Include="@(ProjectReferenceProvider)" Exclude="@(Reference)" /> |
80 |
| - |
81 | 79 | <_CompilationOnlyReference Condition="'$(TargetFramework)' == 'netstandard2.0'"
|
82 | 80 | Include="@(Reference->WithMetadataValue('NuGetPackageId','NETStandard.Library'))" />
|
83 | 81 |
|
|
91 | 89 | @(Reference->WithMetadataValue('IsSharedSource', 'true'));
|
92 | 90 | @(Reference->WithMetadataValue('PrivateAssets', 'All'))" />
|
93 | 91 | <_OriginalReferences Include="@(Reference)" />
|
| 92 | + </ItemGroup> |
94 | 93 |
|
95 |
| - <!-- |
96 |
| - Turn Reference items into a ProjectReference when UseProjectReferences is true. |
97 |
| - Order matters. This comes before package resolution because projects should be used when possible instead of packages. |
| 94 | + <!-- |
| 95 | + Turn Reference items into a ProjectReference when UseProjectReferences is true. Intersect the two item groups |
| 96 | + using the Exclude...Exclude approach because nothing else seems to work outside a target. Order matters; this |
| 97 | + comes before package resolution because projects should be used when possible instead of packages. |
98 | 98 | -->
|
99 |
| - <_ProjectReferenceByAssemblyName Condition="'$(UseProjectReferences)' == 'true'" |
100 |
| - Include="@(ProjectReferenceProvider)" |
101 |
| - Exclude="@(_UnusedProjectReferenceProvider)" /> |
| 99 | + <ItemGroup Condition=" '$(EnableCustomReferenceResolution)' == 'true' AND '$(UseProjectReferences)' == 'true' "> |
| 100 | + <!-- _UnusedProjectReferenceProvider may be a fairly big item group; don't log removals unnecessarily. --> |
| 101 | + <_UnusedProjectReferenceProvider Remove="@(_UnusedProjectReferenceProvider)" /> |
| 102 | + <_ProjectReferenceByAssemblyName Remove="@(_ProjectReferenceByAssemblyName)" /> |
| 103 | + |
| 104 | + <_UnusedProjectReferenceProvider Include="@(ProjectReferenceProvider)" Exclude="@(Reference)" /> |
| 105 | + <_ProjectReferenceByAssemblyName Include="@(ProjectReferenceProvider)" Exclude="@(_UnusedProjectReferenceProvider)" /> |
| 106 | + |
| 107 | + <!-- Yes, this is doing multiple additional intersections to get possible Reference metadata. --> |
| 108 | + <_ProjectReferenceByAssemblyName Update="@(Reference->HasMetadata('ExcludeAssets'))"> |
| 109 | + <ExcludeAssets>%(Reference.ExcludeAssets)</ExcludeAssets> |
| 110 | + </_ProjectReferenceByAssemblyName> |
| 111 | + <_ProjectReferenceByAssemblyName Update="@(Reference->HasMetadata('IncludeAssets'))"> |
| 112 | + <IncludeAssets>%(Reference.IncludeAssets)</IncludeAssets> |
| 113 | + </_ProjectReferenceByAssemblyName> |
| 114 | + <_ProjectReferenceByAssemblyName Update="@(Reference->HasMetadata('Private'))"> |
| 115 | + <Private>%(Reference.Private)</Private> |
| 116 | + </_ProjectReferenceByAssemblyName> |
| 117 | + <_ProjectReferenceByAssemblyName Update="@(Reference->HasMetadata('PrivateAssets'))"> |
| 118 | + <PrivateAssets>%(Reference.PrivateAssets)</PrivateAssets> |
| 119 | + </_ProjectReferenceByAssemblyName> |
| 120 | + <_ProjectReferenceByAssemblyName Update="@(Reference->HasMetadata('ReferenceOutputAssembly'))"> |
| 121 | + <ReferenceOutputAssembly>%(Reference.ReferenceOutputAssembly)</ReferenceOutputAssembly> |
| 122 | + </_ProjectReferenceByAssemblyName> |
102 | 123 |
|
103 | 124 | <ProjectReference Include="@(_ProjectReferenceByAssemblyName->'%(ProjectPath)')" />
|
104 | 125 | <Reference Remove="@(_ProjectReferenceByAssemblyName)" />
|
|
0 commit comments