Index: Tools/Google.Apis.NuGet.Publisher/Template/packages/Microsoft.Bcl.Build.1.0.8/tools/Microsoft.Bcl.Build.targets |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/Tools/Google.Apis.NuGet.Publisher/Template/packages/Microsoft.Bcl.Build.1.0.8/tools/Microsoft.Bcl.Build.targets |
@@ -0,0 +1,227 @@ |
+<!-- |
+*********************************************************************************************** |
+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 Condition="'$(TargetFrameworkIdentifier)' != 'Silverlight'"> |
+ <!-- |
+ 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> |
+ </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"> |
+ <!-- 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)' != ''" |
+ 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)' != ''"> |
+ <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> |