123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- <!--
- ***********************************************************************************************
- Microsoft.Bcl.targets
- WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
- created a backup copy. Incorrect changes to this file will make it
- impossible to load or build your projects from the command-line or the IDE.
- Copyright (C) Microsoft Corporation. All rights reserved.
- ***********************************************************************************************
- -->
- <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <BclBuildImported>true</BclBuildImported>
- </PropertyGroup>
-
- <PropertyGroup Condition="'$(TargetFrameworkIdentifier)' != 'Silverlight' and '$(OutputType)' != 'AppContainerExe'">
- <!--
- Workaround MSBuild issue that prevents System.Runtime 2.5 and System.Threading.Tasks 2.5 from
- satisfying indirect dependencies on System.Runtime 1.5 and System.Threading.Tasks 1.5 respectively.
- -->
- <AutoUnifyAssemblyReferences>false</AutoUnifyAssemblyReferences>
- <!-- MSBuild by default doesn't pass the Web.Config ResolveAssemblyReference, in which case, set it so that it sees binding redirects -->
- <AppConfig Condition="'$(AppConfig)' == '' And '$(WebProjectOutputDir)' != '' And Exists('$(ProjectConfigFileName)')">$(ProjectConfigFileName)</AppConfig>
- </PropertyGroup>
- <!-- Workaround issue that incorrectly unifies references not in the current profile to the version in the superset of all profiles. -->
- <Target Name="_BclBuildSetFullFrameworkFolderToProfile" AfterTargets="GetReferenceAssemblyPaths" Condition="'$(TargetFrameworkIdentifier)' == '.NETPortable'">
- <PropertyGroup>
- <_FullFrameworkReferenceAssemblyPaths>$(TargetFrameworkDirectory)</_FullFrameworkReferenceAssemblyPaths>
- </PropertyGroup>
- </Target>
- <!--
- *******************************************************************************************************************
- *******************************************************************************************************************
- EnsureBindingRedirects Section
- *******************************************************************************************************************
- *******************************************************************************************************************
- -->
- <PropertyGroup>
- <__IntermediateAppConfig>$(IntermediateOutputPath)$(MSBuildProjectFile).App.config</__IntermediateAppConfig>
- <SkipEnsureBindingRedirects Condition="'$(TargetFrameworkIdentifier)' == 'Silverlight' or '$(OutputType)' == 'AppContainerExe'">true</SkipEnsureBindingRedirects>
- </PropertyGroup>
- <UsingTask TaskName="EnsureBindingRedirects" AssemblyFile="$(MSBuildThisFileDirectory)Microsoft.Bcl.Build.Tasks.dll" />
- <!--
- ===================================================================================================================
- BclBuildDetermineReferencesToRedirect
-
- Determine which references are opted in for binding redirects
- ===================================================================================================================
- -->
- <Target Name="BclBuildDetermineReferencesToRedirect" BeforeTargets="BclBuildEnsureBindingRedirects" Condition="'$(SkipEnsureBindingRedirects)' != 'true'">
- <!-- Convention is a file next to the reference with name "ensureRedirect.xml" -->
- <ItemGroup>
- <_EnsureBindingRedirectReference Include="@(Reference)"
- Condition="'%(Reference.HintPath)' != '' and Exists('$([System.IO.Path]::GetDirectoryName("%(Reference.HintPath)"))\\ensureRedirect.xml')" />
- </ItemGroup>
- </Target>
- <!--
- ===================================================================================================================
- BclBuildEnsureBindingRedirects
-
- Generate a new app.config with merged binding redirects if we have binding redirects to ensure and it's out of date
- ===================================================================================================================
- -->
- <Target Name="BclBuildEnsureBindingRedirects"
- DependsOnTargets="BclBuildDetermineReferencesToRedirect"
- BeforeTargets="ResolveAssemblyReferences"
- Condition="'@(_EnsureBindingRedirectReference)' != '' and '$(SkipEnsureBindingRedirects)' != 'true'"
- Inputs="$(MSBuildAllProjects);$(AppConfig);@(_EnsureBindingRedirectReference->'%(HintPath)')"
- Outputs="$(__IntermediateAppConfig)">
- <EnsureBindingRedirects References="@(_EnsureBindingRedirectReference->'%(HintPath)')"
- SourceAppConfigPath="$(AppConfig)"
- DestinationAppConfigPath="$(__IntermediateAppConfig)">
- <Output TaskParameter="DestinationAppConfigPath" ItemName="FileWrites"/>
- </EnsureBindingRedirects>
- </Target>
- <!--
- ===================================================================================================================
- BclBuildUpdateAppConfigWithTargetPath
-
- Update project properties to point to the generated app.config
- ===================================================================================================================
- -->
- <Target Name="BclBuildUpdateAppConfigWithTargetPath"
- DependsOnTargets="BclBuildDetermineReferencesToRedirect;BclBuildEnsureBindingRedirects"
- BeforeTargets="ResolveAssemblyReferences"
- Condition="'@(_EnsureBindingRedirectReference)' != '' and '$(SkipEnsureBindingRedirects)' != 'true'">
- <PropertyGroup>
- <AppConfig>$(__IntermediateAppConfig)</AppConfig>
- </PropertyGroup>
- <ItemGroup>
- <AppConfigWithTargetPath Remove="@(AppConfigWithTargetPath)" />
- <AppConfigWithTargetPath Include="$(AppConfig)">
- <TargetPath>$(TargetFileName).config</TargetPath>
- </AppConfigWithTargetPath>
- </ItemGroup>
- </Target>
- <!--
- *******************************************************************************************************************
- *******************************************************************************************************************
- ValidatePackageReferences Section
-
- This group of targets enables validation of nuget package references when building inside VisualStudio.
- *******************************************************************************************************************
- *******************************************************************************************************************
- -->
- <!--
- ===================================================================================================================
- BclBuildAddProjectReferenceProperties
-
- Adds properties to be set when resolving project references. The properties ensure that the references get built
- in the context of the referencer (by changing the set of properties used to build the project) and pass down the
- context needed to validate the referencing project.
- ===================================================================================================================
- -->
- <Target Name="BclBuildAddProjectReferenceProperties"
- BeforeTargets="AssignProjectConfiguration"
- Condition="'$(BuildingInsideVisualStudio)' == 'true'">
- <PropertyGroup>
- <_BclBuildProjectReferenceProperties>BclBuildReferencingProject=$(MSBuildProjectFullPath);BclBuildReferencingProjectConfig=$(MSBuildProjectDirectory)\packages.config</_BclBuildProjectReferenceProperties>
- <_BclBuildProjectReferenceProperties Condition="'$(SkipValidatePackageReferences)' != ''">$(_BclBuildProjectReferenceProperties);SkipValidatePackageReferences=$(SkipValidatePackageReferences)</_BclBuildProjectReferenceProperties>
- </PropertyGroup>
- <ItemGroup>
- <ProjectReference>
- <AdditionalProperties>$(_BclBuildProjectReferenceProperties);%(ProjectReference.AdditionalProperties)</AdditionalProperties>
- </ProjectReference>
- </ItemGroup>
- </Target>
- <!--
- ===================================================================================================================
- BclBuildSetRunningFullBuild
-
- Determines when a full build is running as opposed to a single target.
- ===================================================================================================================
- -->
- <Target Name="BclBuildSetRunningFullBuild"
- BeforeTargets="BuildOnlySettings">
- <PropertyGroup>
- <BclBuildRunningFullBuild>true</BclBuildRunningFullBuild>
- </PropertyGroup>
- </Target>
- <!--
- ===================================================================================================================
- GetTargetPath/BclBuildGetTargetPath
-
- MSBuild will only build a target once for a given set of properties.
-
- We need that single build of GetTargetPath to run during project reference resolution, so that we can detect a
- referencing project that doesn't have Bcl.Build.
-
- To accomplish this we replace GetTargetPath with BclBuildGetTargetPath when running a full build.
- ===================================================================================================================
- -->
- <Target
- Name="GetTargetPath"
- Condition="'$(BclBuildRunningFullBuild)' != 'true'"
- DependsOnTargets="$(GetTargetPathDependsOn)"
- Returns="$(TargetPath)"/>
- <Target
- Name="BclBuildGetTargetPath"
- Condition="'$(BclBuildRunningFullBuild)' == 'true'"
- AfterTargets="GetTargetPath"
- Returns="$(TargetPath)">
- <PropertyGroup>
- <!-- Reset BclBuildRunningFullBuild, it will be set again when doing a full build. -->
- <BclBuildRunningFullBuild>false</BclBuildRunningFullBuild>
- </PropertyGroup>
- </Target>
- <!--
- ===================================================================================================================
- BclBuildValidateNugetPackageReferences
-
- This target validates that any Nuget packages installed in the current project are also installed in projects
- referencing the current project.
-
- This is necessary because Nuget packages contain more than just simple references. Installing the package ensures
- 1. The right set of references for the target framework are added
- 2. Config file transforms are applied
- 3. Project installation scripts are run
-
- For all packages listed as installed for the current project in packages config, if the package ID matches one
- specified in @(ValidatePackages), ensure that the same package is installed in the referencing project.
-
- This target can be disabled for a project reference by setting SkipValidatePackageReferences=true for the reference:
- <ProjectReference Include="..\pcl\pcl.csproj">
- <Project>{664a9e98-fac7-4567-a046-0dde95fddb48}</Project>
- <Name>pcl</Name>
- <Properties>SkipValidatePackageReferences=true</Properties>
- </ProjectReference>
-
- This target can be disabled for all references to a project by adding the following:
- <PropertyGroup>
- <SkipValidatePackageReferences>true</SkipValidatePackageReferences>
- </PropertyGroup>
- ===================================================================================================================
- -->
- <UsingTask TaskName="ValidatePackageReferences" AssemblyFile="$(MSBuildThisFileDirectory)Microsoft.Bcl.Build.Tasks.dll" />
- <Target Name="BclBuildValidateNugetPackageReferences"
- Condition="'$(BclBuildRunningFullBuild)' != 'true' AND '$(SkipValidatePackageReferences)' != 'true' AND '$(BuildingInsideVisualStudio)' == 'true'"
- BeforeTargets="GetTargetPath">
- <ItemGroup>
- <ValidatePackages Include="Microsoft.Bcl"/>
- <ValidatePackages Include="Microsoft.Bcl.Async"/>
- <ValidatePackages Include="Microsoft.Bcl.Compression"/>
- <ValidatePackages Include="Microsoft.Net.Http"/>
- </ItemGroup>
- <ValidatePackageReferences Packages="@(ValidatePackages)"
- ReferencingProject="$(BclBuildReferencingProject)"
- ReferencingProjectPackagesConfig="$(BclBuildReferencingProjectConfig)"
- ReferencedProject="$(MSBuildProjectFullPath)"
- ReferencedProjectPackagesConfig="$(MSBuildProjectDirectory)\packages.config"
- TreatWarningsAsErrors="$(TreatWarningsAsErrors)" />
- </Target>
- </Project>
|