summaryrefslogtreecommitdiff
path: root/Tools/ReferenceAssemblies.targets
blob: 303884ed8f9e4c472b7424c42055410c71728237 (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
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <PropertyGroup>
    <!-- The first two parts of the assembly version represent API version, 
         the third part is for bugfixes, the fourth is for hotfixes/securtity-updates -->
    <APIVersion>$([System.Version]::Parse('$(AssemblyVersion)').ToString(2))</APIVersion>

    <_usingRoslyn Condition="'$(MSBuildToolsVersion)' == 'dogfood' OR '$(MSBuildToolsVersion)' == 'Current' OR '$(MSBuildToolsVersion)' &gt;= '14.0'">true</_usingRoslyn>

    <!-- Create a common root output directory for all reference assemblies -->
    <ReferenceAssemblyOutputPath Condition="'$(ReferenceAssemblyOutputPath)' == ''">$(BaseOutputPath)ref/</ReferenceAssemblyOutputPath>
  </PropertyGroup>

  <PropertyGroup Condition="'$(IsReferenceAssembly)'=='true'">
    <AssemblyName Condition="'$(AssemblyName)' == ''">$(MSBuildProjectName)</AssemblyName>
    <TargetOutputRelPath Condition="'$(IsCompatAssembly)'=='true'">$(TargetOutputRelPath)Compat/</TargetOutputRelPath>
    <OutputPath>$(ReferenceAssemblyOutputPath)$(AssemblyName)/$(AssemblyVersion)/$(TargetOutputRelPath)</OutputPath>
    <IntermediateOutputPath>$(RootIntermediateOutputPath)ref/$(AssemblyName)/$(AssemblyVersion)/$(TargetOutputRelPath)</IntermediateOutputPath>

    <OmitTransitiveCompileReferences>true</OmitTransitiveCompileReferences>
    <!-- if this is a reference assembly deployment project use compile assets 
         instead of runtime -->
    <NuGetDeploySourceItem>Reference</NuGetDeploySourceItem>
  </PropertyGroup>

  <PropertyGroup Condition="'$(IsReferenceAssembly)'=='true' AND '$(UsingMicrosoftNETSdk)'=='true'">
    <!-- When not using Sdk-style projects, Microsoft.Common.CurrentVersion.targets,  
         (which defaults the below properties) is imported after this file, so these properties
         are getting set correctly.
         When using Sdk-style projects, Microsoft.Common.CurrentVersion.targets gets imported before
         this file, so we are overwriting OutputPath too late and we need to re-default these properties. -->

    <OutDir>$(OutputPath)</OutDir>
    <TargetDir>$([MSBuild]::Escape($([System.IO.Path]::GetFullPath(`$([System.IO.Path]::Combine(`$(MSBuildProjectDirectory)`, `$(OutDir)`))`))))</TargetDir>
    <TargetPath>$(TargetDir)$(TargetFileName)</TargetPath>
  </PropertyGroup>

  <ItemGroup Condition="'$(IsReferenceAssembly)'=='true'">
    <!-- All reference assemblies should have the 0x70 flag which prevents them from loading 
         and the ReferenceAssemblyAttribute. -->
    <AssemblyInfoLines Include="[assembly:System.Runtime.CompilerServices.ReferenceAssembly]" />
    <AssemblyInfoLines Include="[assembly:System.Reflection.AssemblyFlags((System.Reflection.AssemblyNameFlags)0x70)]" />
  </ItemGroup>

  <!-- Roslyn requires the runtimemetadataversion parameter when building a core assembly -->
  <Target Name="AddCoreAssemblyResponseFile" Condition="'$(IsCoreAssembly)' == 'true' AND '$(_usingRoslyn)' == 'true'" BeforeTargets="CoreCompile">
    <PropertyGroup>
      <CompilerResponseFile Condition="'$(CompilerResponseFile)'!=''">$(MSBuildThisFileDirectory)coreAssembly.rsp;$(CompilerResponseFile)</CompilerResponseFile>
      <CompilerResponseFile Condition="'$(CompilerResponseFile)'==''">$(MSBuildThisFileDirectory)coreAssembly.rsp</CompilerResponseFile>
    </PropertyGroup>
  </Target>
</Project>