GenerateInternalsVisibleTo.targets 8.2 KB
Newer Older
P
Pilchie 已提交
1 2 3 4 5 6
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <GeneratedInternalsVisibleToFile>$(IntermediateOutputPath)GeneratedInternalsVisibleTo$(DefaultLanguageSourceExtension)</GeneratedInternalsVisibleToFile>
  </PropertyGroup>

  <PropertyGroup>
7
    <CoreCompileDependsOn>GenerateInternalsVisibleToFile;$(CoreCompileDependsOn)</CoreCompileDependsOn>
P
Pilchie 已提交
8 9 10 11 12 13 14 15 16
  </PropertyGroup>

  <ItemDefinitionGroup>
    <InternalsVisibleTo>
      <Visible>false</Visible>
    </InternalsVisibleTo>
    <InternalsVisibleToTest>
      <Visible>false</Visible>
    </InternalsVisibleToTest>
17 18 19
    <InternalsVisibleToTypeScript>
      <Visible>false</Visible>
    </InternalsVisibleToTypeScript>
M
Marco Goertz 已提交
20 21 22
    <InternalsVisibleToVisualStudio>
      <Visible>false</Visible>
    </InternalsVisibleToVisualStudio>
23 24 25
    <InternalsVisibleToFSharp>
      <Visible>false</Visible>
    </InternalsVisibleToFSharp>
26 27 28
    <InternalsVisibleToMoq>
      <Visible>false</Visible>
    </InternalsVisibleToMoq>
29 30 31
    <InternalsVisibleToMonodevelop>
      <Visible>false</Visible>
    </InternalsVisibleToMonodevelop>
R
Ryan Nowak 已提交
32 33 34
    <InternalsVisibleToRazor>
      <Visible>false</Visible>
    </InternalsVisibleToRazor>
P
Pilchie 已提交
35 36
  </ItemDefinitionGroup>

J
Jared Parsons 已提交
37
  <PropertyGroup Condition="'$(PublicKey)' != '' and '$(SignAssembly)' == 'True'">
38
    <InternalsVisibleToSuffix>, PublicKey=$(RoslynPublicKey)</InternalsVisibleToSuffix>
P
Pilchie 已提交
39
    <InternalsVisibleToTestSuffix>, PublicKey=$(RoslynInternalKey)</InternalsVisibleToTestSuffix>
40
    <InternalsVisibleToMoqSuffix>, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7</InternalsVisibleToMoqSuffix>
41
    <InternalsVisibleToMonodevelopSuffix>, PublicKey=002400000c800000940000000602000000240000525341310004000001000100e1290d741888d13312c0cd1f72bb843236573c80158a286f11bb98de5ee8acc3142c9c97b472684e521ae45125d7414558f2e70ac56504f3e8fe80830da2cdb1cda8504e8d196150d05a214609234694ec0ebf4b37fc7537e09d877c3e65000f7467fa3adb6e62c82b10ada1af4a83651556c7d949959817fed97480839dd39b</InternalsVisibleToMonodevelopSuffix>
P
Pilchie 已提交
42 43 44 45 46
  </PropertyGroup>

  <!-- Dependency on PrepareForBuild is necessary so that we don't accidentally get ordered before it.
  We rely on PrepareForBuild to create the IntermediateOutputDirectory if it doesn't exist. -->
  <Target Name="GenerateInternalsVisibleToFile"
J
jasonmalinowski 已提交
47
          Inputs="$(MSBuildThisFileFullPath);$(MSBuildProjectFile)"
P
Pilchie 已提交
48
          Outputs="$(GeneratedInternalsVisibleToFile)"
J
jasonmalinowski 已提交
49
          DependsOnTargets="PrepareForBuild"
50
          Condition="'@(InternalsVisibleTo)' != '' OR '@(InternalsVisibleToTest)' != '' OR '@(InternalsVisibleToTypeScript)' != '' OR '@(InternalsVisibleToVisualStudio)' != '' OR '@(InternalsVisibleToFSharp)' != '' OR '@(InternalsVisibleToMoq)' != '' OR '@(InternalsVisibleToRazor)' != ''">
P
Pilchie 已提交
51 52 53 54

    <!--
         This is a slightly evil trick. What we have is a group of InternalsVisibleTo items which
         we need to convert to the items that the WriteCodeFragment expects. They look like this:
55

P
Pilchie 已提交
56
         <InternalsVisibleTo Include="Foo" />
57

P
Pilchie 已提交
58
         And need to convert it to:
59

P
Pilchie 已提交
60 61 62
         <InternalsVisibleToAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
           <_Parameter1>Foo</Parameter1>
         </InternalsVisibleToAttribute>
63

P
Pilchie 已提交
64 65 66 67 68 69 70 71 72 73 74 75 76 77
         One way (although a bit evil) is to use the old CreateItem task. Since we use the well-defined
         "Identity" metadata on each of our itemgroups, MSBuild batching will take effect and this task
         will be invoked once for each InternalsVisibleTo item.
    -->
    <CreateItem Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute"
                AdditionalMetadata="_Parameter1=%(InternalsVisibleTo.Identity)$(InternalsVisibleToSuffix)"
                Condition="'@(InternalsVisibleTo)' != ''">
      <Output TaskParameter="Include" ItemName="InternalsVisibleToAttribute" />
    </CreateItem>
    <CreateItem Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute"
                AdditionalMetadata="_Parameter1=%(InternalsVisibleToTest.Identity)$(InternalsVisibleToTestSuffix)"
                Condition="'@(InternalsVisibleToTest)' != ''">
      <Output TaskParameter="Include" ItemName="InternalsVisibleToAttribute" />
    </CreateItem>
78
    <CreateItem Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute"
79
                AdditionalMetadata="_Parameter1=%(InternalsVisibleToTypeScript.Identity), PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293"
80 81 82
                Condition="'@(InternalsVisibleToTypeScript)' != ''">
      <Output TaskParameter="Include" ItemName="InternalsVisibleToAttribute" />
    </CreateItem>
M
Marco Goertz 已提交
83
    <CreateItem Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute"
84
                AdditionalMetadata="_Parameter1=%(InternalsVisibleToVisualStudio.Identity), PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293"
M
Marco Goertz 已提交
85 86 87
                Condition="'@(InternalsVisibleToVisualStudio)' != ''">
      <Output TaskParameter="Include" ItemName="InternalsVisibleToAttribute" />
    </CreateItem>
88
    <CreateItem Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute"
89
                AdditionalMetadata="_Parameter1=%(InternalsVisibleToFSharp.Identity), PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293"
90
                Condition="'@(InternalsVisibleToFSharp)' != ''">
91 92 93
      <Output TaskParameter="Include" ItemName="InternalsVisibleToAttribute" />
    </CreateItem>
    <CreateItem Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute"
94
                AdditionalMetadata="_Parameter1=%(InternalsVisibleToMoq.Identity)$(InternalsVisibleToMoqSuffix)"
95 96 97
                Condition="'@(InternalsVisibleToMoq)' != ''">
      <Output TaskParameter="Include" ItemName="InternalsVisibleToAttribute" />
    </CreateItem>
98 99 100 101 102
    <CreateItem Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute"
                AdditionalMetadata="_Parameter1=%(InternalsVisibleToMonodevelop.Identity)$(InternalsVisibleToMonodevelopSuffix)"
                Condition="'@(InternalsVisibleToMonodevelop)' != ''">
      <Output TaskParameter="Include" ItemName="InternalsVisibleToAttribute" />
    </CreateItem>
R
Ryan Nowak 已提交
103
    <CreateItem Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute"
104
                AdditionalMetadata="_Parameter1=%(InternalsVisibleToRazor.Identity), PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb"
R
Ryan Nowak 已提交
105 106 107
                Condition="'@(InternalsVisibleToRazor)' != ''">
      <Output TaskParameter="Include" ItemName="InternalsVisibleToAttribute" />
    </CreateItem>
J
Cleanup  
Jared Parsons 已提交
108
    <!-- The necessity of this Task is tracked by https://github.com/dotnet/roslyn/issues/8421 -->
109
    <WriteCodeFragmentEx
110 111 112
        AssemblyAttributes="@(InternalsVisibleToAttribute)"
        Language="$(Language)"
        OutputFile="$(GeneratedInternalsVisibleToFile)">
P
Pilchie 已提交
113 114
      <Output TaskParameter="OutputFile" ItemName="Compile" />
      <Output TaskParameter="OutputFile" ItemName="FileWrites" />
115
    </WriteCodeFragmentEx>
116

P
Pilchie 已提交
117 118
  </Target>
</Project>