Welcome to mirror list, hosted at ThFree Co, Russian Federation.

resolveContract.targets « eng - github.com/dotnet/runtime.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 0e0cfc05c56e0e13f91e77aef16b3fb2a0e5e21b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<Project>
  <PropertyGroup>
    <!-- Use implementation referencepath if no contract dependency path is set.
         This item transform is executed at the time this property is evaluated in the API Compat targets. -->
    <ContractDependencyPaths Condition="'$(ContractDependencyPaths)' == ''">@(ReferencePath->'%(RelativeDir)'->Distinct())</ContractDependencyPaths>
    <!-- Fall back to the targeting pack dir for NetCoreAppCurrent to avoid passing through dependencies from ref to src. -->
    <ContractDependencyPaths Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', '$(NetCoreAppCurrent)'))">$(ContractDependencyPaths);$(MicrosoftNetCoreAppRefPackRefDir)</ContractDependencyPaths>
  </PropertyGroup>

  <PropertyGroup Condition="'$(IsSourceProject)' == 'true'">
    <ContractProject Condition="'$(ContractProject)' == ''">$(LibrariesProjectRoot)$(MSBuildProjectName)\ref\$(MSBuildProjectName).csproj</ContractProject>
    <HasMatchingContract Condition="'$(HasMatchingContract)' == '' and Exists('$(ContractProject)')">true</HasMatchingContract>
    <!-- Disable API compat if the project doesn't have reference assembly -->
    <RunApiCompat Condition="'$(HasMatchingContract)' != 'true'">false</RunApiCompat>
  </PropertyGroup>

  <ItemGroup Condition="'$(HasMatchingContract)' == 'true' and '$(ContractProject)' != '' and '@(ResolvedMatchingContract)' == ''">
    <ProjectReference Include="$(ContractProject)" ReferenceOutputAssembly="false" OutputItemType="ResolvedMatchingContract" />
    <!-- We aren't referencing the contract, but make sure it's considered as an input to Compile so that if it changes we rebuild and rerun API compat -->
    <ProjectReference Include="$(ContractProject)" ReferenceOutputAssembly="false" OutputItemType="CustomAdditionalCompileInputs" />
  </ItemGroup>
  <!-- intentionally empty since we no longer need a target -->
  <Target Name="ResolveMatchingContract" />

  <!-- Allow P2Ps that target a source project to build against the corresponding ref project. -->
  <Target Name="AnnotateTargetPathWithTargetPlatformMonikerWithReferenceAssembly"
          Condition="'$(HasMatchingContract)' == 'true'"
          DependsOnTargets="ResolveProjectReferences"
          AfterTargets="GetTargetPathWithTargetPlatformMoniker">
    <ItemGroup>
      <!-- Allow to point to a different reference project than what GenFacades uses to generate the type forwards. -->
      <TargetPathWithTargetPlatformMoniker ReferenceAssembly="@(ResolvedMatchingContractOverride)" />
      <TargetPathWithTargetPlatformMoniker ReferenceAssembly="@(ResolvedMatchingContract)"
                                           Condition="'@(ResolvedMatchingContractOverride)' == ''" />
    </ItemGroup>
  </Target>

  <Target Name="HandleReferenceAssemblyAttributeForProjectReferences"
          AfterTargets="ResolveProjectReferences"
          BeforeTargets="FindReferenceAssembliesForReferences"
          Condition="'@(ProjectReference)' != '' and '@(_ResolvedProjectReferencePaths)' != ''">
    <!-- If we have a ProjectReference to CoreLib, we need to compile against implementation assemblies. -->
    <PropertyGroup Condition="@(_ResolvedProjectReferencePaths->AnyHaveMetadataValue('MSBuildSourceProjectFile', '$(CoreLibProject)'))">
      <CompileUsingReferenceAssemblies Condition="'$(CompileUsingReferenceAssemblies)' == ''">false</CompileUsingReferenceAssemblies>
    </PropertyGroup>
    <!-- Clear the ReferenceAssembly attribute on resolved P2Ps that set SkipUseReferenceAssembly to true. -->
    <ItemGroup>
      <_resolvedP2PFiltered Include="@(ProjectReference)"
                            ProjectReferenceItemSpec="$([System.IO.Path]::GetFullPath('%(ProjectReference.Identity)'))" 
                            SkipUseReferenceAssembly="%(ProjectReference.SkipUseReferenceAssembly)" />
      <_ResolvedProjectReferencePaths Condition="'%(_resolvedP2PFiltered.ProjectReferenceItemSpec)' == '%(_resolvedP2PFiltered.MSBuildSourceProjectFile)' and
                                                 '%(_resolvedP2PFiltered.SkipUseReferenceAssembly)' == 'true'"
                                      ReferenceAssembly="" />
    </ItemGroup>
  </Target>
</Project>