Files
linux-packaging-mono/external/corefx/Tools-Override/FrameworkTargeting.targets

219 lines
12 KiB
Plaintext
Raw Normal View History

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<TargetingPackDirs Include="$(RefPath)" />
<AdditionalReferencePaths Include="@(TargetingPackDirs)" />
</ItemGroup>
<PropertyGroup>
<ContractOutputPath>$(RefPath)</ContractOutputPath>
<FrameworkPathOverride>$(ContractOutputPath)</FrameworkPathOverride>
<AssemblySearchPaths>$(AssemblySearchPaths);$(ContractOutputPath);{RawFileName}</AssemblySearchPaths>
<!-- Disable RAR from transitively discovering depdencies for References -->
<_FindDependencies>false</_FindDependencies>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFrameworkIdentifier)' == ''
and '$(TargetFrameworkVersion)' == ''
and '$(TargetFrameworkProfile)' == '' ">
<TargetingDefaultPlatform>true</TargetingDefaultPlatform>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFrameworkIdentifier)' == ''">
<TargetFrameworkIdentifier>.NETPortable</TargetFrameworkIdentifier>
</PropertyGroup>
<!--
Limit the assembly resolution to just explicit locations.
Don't search anything machine-wide or build-order dependent.
<PropertyGroup>
<AssemblySearchPaths>{HintPathFromItem};{RawFileName}</AssemblySearchPaths>
</PropertyGroup>
-->
<!--
When targeting an explicit platform other than the default,
also allow the target framework directory.
-->
<PropertyGroup Condition="'$(TargetingDefaultPlatform)' != 'true'">
<AssemblySearchPaths>$(AssemblySearchPaths);{TargetFrameworkDirectory}</AssemblySearchPaths>
</PropertyGroup>
<!-- Setup the default target for projects not already explicitly targeting another platform -->
<PropertyGroup Condition="'$(TargetingDefaultPlatform)' == 'true'">
<!-- Setting a default portable profile, although nothing should resolve from there as we want to use the pacakge refs -->
<TargetPlatformIdentifier>Portable</TargetPlatformIdentifier>
<TargetFrameworkIdentifier>.NETPortable</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
<TargetFrameworkMonikerDisplayName>.NET Portable Subset</TargetFrameworkMonikerDisplayName>
<ImplicitlyExpandTargetFramework>false</ImplicitlyExpandTargetFramework>
<!-- Disable RAR complaining about us referencing higher .NET Portable libraries as we aren't a traditional portable library -->
<ResolveAssemblyReferenceIgnoreTargetFrameworkAttributeVersionMismatch>true</ResolveAssemblyReferenceIgnoreTargetFrameworkAttributeVersionMismatch>
<NuGetTargetMoniker Condition="'$(NuGetTargetMoniker)' == ''">.NETCoreApp,Version=v1.0</NuGetTargetMoniker>
</PropertyGroup>
<PropertyGroup Condition="'$(IncludeDefaultReferences)' == ''">
<IncludeDefaultReferences Condition="'$(MSBuildProjectExtension)' == '.csproj'">true</IncludeDefaultReferences>
<IncludeDefaultReferences Condition="'$(MSBuildProjectExtension)' == '.vbproj'">true</IncludeDefaultReferences>
</PropertyGroup>
<Target Name="SetupDefaultReferences">
<ItemGroup Condition="'$(IncludeDefaultReferences)' =='true'">
<!-- netstandard is a default reference whenever building for NETStandard or building an implementation assembly -->
<DefaultReference Condition="($(NuGetTargetMoniker.StartsWith('.NETStandard')) OR '$(IsReferenceAssembly)' != 'true') AND Exists('$(RefPath)netstandard.dll')"
Include="netstandard" />
</ItemGroup>
</Target>
<Target Name="UpdateReferenceItems"
DependsOnTargets="SetupDefaultReferences"
BeforeTargets="BeforeResolveReferences"
>
<ItemGroup>
<Reference Include="@(DefaultReference)" />
</ItemGroup>
<ItemGroup>
<!-- Simple name references will be resolved from the targeting pack folders and should never be copied to output -->
<Reference Condition="'%(Reference.Extension)' != '.dll'">
<Private>false</Private>
</Reference>
</ItemGroup>
</Target>
<!-- Need to add references to the mscorlib design-time facade for some old-style portable dependencies like xunit -->
<Target Name="AddDesignTimeFacadeReferences"
Condition="'$(TargetingDefaultPlatform)' == 'true' AND '$(IsReferenceAssembly)' != 'true' AND '$(ExcludeMscorlibFacade)' != 'true'"
BeforeTargets="ResolveReferences"
DependsOnTargets="GetReferenceAssemblyPaths"
>
<PropertyGroup>
<_resolvedMscorlib Condition="'%(ReferencePath.FileName)' == 'mscorlib'">true</_resolvedMscorlib>
</PropertyGroup>
<ItemGroup>
<PossibleTargetFrameworks Include="$(_TargetFrameworkDirectories)" />
<ReferencePath Include="%(PossibleTargetFrameworks.Identity)mscorlib.dll"
Condition="'$(_resolvedMscorlib)' != 'true' and '%(PossibleTargetFrameworks.Identity)' != '' and Exists('%(PossibleTargetFrameworks.Identity)mscorlib.dll')" />
</ItemGroup>
</Target>
<PropertyGroup>
<!-- Disable WindowsAppContainer property to prevent importing AppX targets which we don't need -->
<WindowsAppContainer Condition="'$(WindowsAppContainer)'==''">false</WindowsAppContainer>
</PropertyGroup>
<Import Project="depProj.targets"
Condition="'$(MSBuildProjectExtension)' == '.depproj'" />
<Import Project="IL.targets"
Condition="'$(MSBuildProjectExtension)' == '.ilproj' AND '$(SkipImportILTargets)'!='true'" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets"
Condition="'$(TargetFrameworkIdentifier)' == '.NETPortable' and '$(MSBuildProjectExtension)' == '.csproj'" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets"
Condition="'$(TargetFrameworkIdentifier)' != '.NETPortable' and '$(MSBuildProjectExtension)' == '.csproj'" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.VisualBasic.targets"
Condition="'$(TargetFrameworkIdentifier)' == '.NETPortable' and '$(MSBuildProjectExtension)' == '.vbproj'" />
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets"
Condition="'$(TargetFrameworkIdentifier)' != '.NETPortable' and '$(MSBuildProjectExtension)' == '.vbproj'" />
<PropertyGroup>
<ResolveReferencesDependsOn>
AddProjectReferencesDynamically;
$(ResolveReferencesDependsOn);
</ResolveReferencesDependsOn>
<CleanDependsOn>
AddProjectReferencesDynamically;
$(CleanDependsOn);
</CleanDependsOn>
</PropertyGroup>
<!--
Common targets don't provide a good place to enable adding new ProjectReference items in targets that work
with both clean, build, and rebuild entry point targets. We cannot hook off of AssignProjectConfigurations
because it is conditioned on "'@(ProjectReference)'!=''" which gets evalulated before the BeforeTargets run
so adding ProjectReference as part of a BeforeTarget make still have the AssignProjectConfiguration skipped.
To help with this problem we are creating a new target and correctly hooking it up in the resolve and clean
depends on target chains.
For information on evaulation of targets ordering see https://msdn.microsoft.com/en-us/library/ee216359.aspx.
-->
<Target Name="AddProjectReferencesDynamically" DependsOnTargets="$(AddProjectReferencesDynamicallyDependsOn)" />
<PropertyGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETFramework' and '$(OutputType)' == 'exe'">
<!-- RAR thinks all EXEs require binding redirects. That's not the case for CoreCLR -->
<AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences>
<GenerateBindingRedirectsOutputType>false</GenerateBindingRedirectsOutputType>
</PropertyGroup>
<!-- We need to point $(FrameworkPathOverride) to the directory that contains explicitly referenced System.Runtime.dll, if any.
Otherwise, if $(FrameworkPathOverride)\System.Runtime.dll is not the same file as the one referenced explicitly,
VS2013 VB compiler would load it and then it would complain about ambiguous type declarations.
-->
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.vbproj'">
<CoreCompileDependsOn>$(CoreCompileDependsOn);OverrideFrameworkPathForVisualBasic</CoreCompileDependsOn>
</PropertyGroup>
<Target Name="OverrideFrameworkPathForVisualBasic" AfterTargets="ResolveAssemblyReferences" Condition="'$(MSBuildProjectExtension)' == '.vbproj'">
<ItemGroup>
<FrameworkPathOverrideCandidate Include="%(ReferencePath.RootDir)%(ReferencePath.Directory)"
Condition="'%(ReferencePath.Filename)%(ReferencePath.Extension)' == 'System.Runtime.dll'">
</FrameworkPathOverrideCandidate>
</ItemGroup>
<PropertyGroup Condition="'@(FrameworkPathOverrideCandidate->Count())' == '1'">
<FrameworkPathOverride>@(FrameworkPathOverrideCandidate)</FrameworkPathOverride>
</PropertyGroup>
</Target>
<!--
Cross Platform MSBuild has some logic to replace \ with / when invoking commands to fix up path differences between Windows and
*NIX. The define command line argument syntax for VB requires that we both surround some items with quotes and escape the quotes with
backslashes. However, due to the above MSBuild logic, this causes an invalid command line to be generated when running on *NIX.
Microsoft/msbuild#422 tracks an actual fix in MSBuild, but for now we work around the issue by using a custom task that
transforms the set of defines we are going to use into a response file we can pass along to the Vbc task along with an
empty set of defines.
-->
<UsingTask TaskName="WriteVisualBasicDefineResponseFile" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll" />
<Target Name="ConvertDefinesToResonseFile" BeforeTargets="CoreCompile" Condition="'$(MSBuildProjectExtension)' == '.vbproj'">
<WriteVisualBasicDefineResponseFile DefineConstants="$(FinalDefineConstants)"
File="$(IntermediateOutputPath)/defines.rsp" />
<PropertyGroup>
<CompilerResponseFile>$(IntermediateOutputPath)/defines.rsp;$(CompilerResponseFile)</CompilerResponseFile>
<FinalDefineConstants></FinalDefineConstants>
</PropertyGroup>
</Target>
<Target Name="ConvertCommonMetadataToAdditionalProperties" BeforeTargets="AssignProjectConfiguration">
<!-- list each append as a seperate item to force re-evaluation of AdditionalProperties metadata -->
<ItemGroup>
<!-- Configuration property shortcuts -->
<ProjectReference>
<AdditionalProperties Condition="'%(ProjectReference.Configuration)' != ''">Configuration=%(ProjectReference.Configuration);%(ProjectReference.AdditionalProperties)</AdditionalProperties>
</ProjectReference>
<!-- Packaging property shortcuts -->
<ProjectReference>
<AdditionalProperties Condition="'%(ProjectReference.PackageTargetFramework)' != ''">PackageTargetFramework=%(ProjectReference.PackageTargetFramework);%(ProjectReference.AdditionalProperties)</AdditionalProperties>
</ProjectReference>
<ProjectReference>
<AdditionalProperties Condition="'%(ProjectReference.PackageTargetPath)' != ''">PackageTargetPath=%(ProjectReference.PackageTargetPath);%(ProjectReference.AdditionalProperties)</AdditionalProperties>
</ProjectReference>
<ProjectReference>
<AdditionalProperties Condition="'%(ProjectReference.PackageTargetRuntime)' != ''">PackageTargetRuntime=%(ProjectReference.PackageTargetRuntime);%(ProjectReference.AdditionalProperties)</AdditionalProperties>
</ProjectReference>
<ProjectReference>
<AdditionalProperties Condition="'%(ProjectReference.Platform)' != ''">Platform=%(ProjectReference.Platform);%(ProjectReference.AdditionalProperties)</AdditionalProperties>
</ProjectReference>
</ItemGroup>
</Target>
</Project>