summaryrefslogtreecommitdiff
path: root/referenceFromRuntime.targets
blob: df0b90a15e7834317f9d428203a84a5cf29556df (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
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="AddReferenceFromRuntimeForTests"
          AfterTargets="ResolveAssemblyReferences"
          Condition="'$(IsTestProject)'=='true' AND '@(ReferenceFromRuntime)' != ''">
    <ItemGroup>
      <!-- tests can use anything from the RuntimePath -->
      <ReferencePath Include="@(ReferenceFromRuntime->'$(RuntimePath)%(Identity).dll')" />
    </ItemGroup>
  </Target>

  <Target Name="AddRuntimeProjectReference"
          BeforeTargets="AddProjectReferencesDynamically"
          Condition="'$(IsTestProject)'!='true' AND '@(ReferenceFromRuntime)' != ''">
    <Error Condition="'$(IsReferenceAssembly)' != 'true' AND '$(RuntimeProjectFile)' == ''" Text="RuntimeProjectFile must be specified when using ReferenceFromRuntime from source projects." />
    <Error Condition="'$(IsReferenceAssembly)' == 'true'" Text="ReferenceFromRuntime may not be used from reference assemblies." />

    <ItemGroup>
      <ProjectReference Include="$(RuntimeProjectFile)">
        <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
        <OutputItemType>_referencePathFromRuntime</OutputItemType>
      </ProjectReference>
    </ItemGroup>
  </Target>

  <Target Name="FilterReferenceFromRuntime"
          AfterTargets="ResolveProjectReferences"
          Condition="'$(IsTestProject)'!='true' AND '@(ReferenceFromRuntime)' != ''">
    <ItemGroup>
      <!-- transform to filename in order to intersect -->
      <_referencePathFromRuntimeByFileName Include="@(_referencePathFromRuntime->'%(FileName)')" >
        <ReferencePath>%(Identity)</ReferencePath>
      </_referencePathFromRuntimeByFileName>

      <!-- intersect with ReferenceFromRuntime -->
      <_filteredReferencePathFromRuntimeByFileName Include="@(_referencePathFromRuntimeByFileName)"
          Condition="'@(_referencePathFromRuntimeByFileName)' == '@(ReferenceFromRuntime)' AND '%(Identity)' != ''" />

      <_missingReferenceFromRuntime Include="@(ReferenceFromRuntime)" Exclude="@(_referencePathFromRuntimeByFileName)" />

      <!-- transform back to path -->
      <ReferencePath Include="@(_filteredReferencePathFromRuntimeByFileName->'%(ReferencePath)')" />
    </ItemGroup>

    <Error Condition="'@(_missingReferenceFromRuntime)' != ''"
           Text="Could not resolve ReferenceFromRuntime item(s) '@(_missingReferenceFromRuntime)' from '$(RuntimeProjectFile)'." />
  </Target>
</Project>