summaryrefslogtreecommitdiff
path: root/packages/microsoft.dotnet.buildtools/2.1.0-rc1-03006-01/lib/FrameworkTargeting.targets
diff options
context:
space:
mode:
Diffstat (limited to 'packages/microsoft.dotnet.buildtools/2.1.0-rc1-03006-01/lib/FrameworkTargeting.targets')
-rwxr-xr-xpackages/microsoft.dotnet.buildtools/2.1.0-rc1-03006-01/lib/FrameworkTargeting.targets440
1 files changed, 440 insertions, 0 deletions
diff --git a/packages/microsoft.dotnet.buildtools/2.1.0-rc1-03006-01/lib/FrameworkTargeting.targets b/packages/microsoft.dotnet.buildtools/2.1.0-rc1-03006-01/lib/FrameworkTargeting.targets
new file mode 100755
index 0000000000..225bef6185
--- /dev/null
+++ b/packages/microsoft.dotnet.buildtools/2.1.0-rc1-03006-01/lib/FrameworkTargeting.targets
@@ -0,0 +1,440 @@
+<?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 dependencies for References -->
+ <_FindDependencies>false</_FindDependencies>
+ </PropertyGroup>
+
+ <PropertyGroup Condition=" '$(TargetFrameworkIdentifier)' == ''
+ and '$(TargetFrameworkVersion)' == ''
+ and '$(TargetFrameworkProfile)' == '' ">
+ <TargetingDefaultPlatform>true</TargetingDefaultPlatform>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(TargetFrameworkIdentifier)' == ''">
+ <TargetFrameworkIdentifier>.NETPortable</TargetFrameworkIdentifier>
+ </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>
+ <!-- We do not want to target a portable profile. -->
+ <TargetFrameworkProfile></TargetFrameworkProfile>
+ <!-- We set this property to avoid MSBuild errors regarding not setting TargetFrameworkProfile (see above line) -->
+ <PortableNuGetMode>true</PortableNuGetMode>
+ <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'" />
+
+ <!--
+ workaround file casing issue where it has different casing in different places which fails on linux builds
+ https://github.com/dotnet/buildtools/issues/1464
+ -->
+ <PropertyGroup>
+ <CSharpTargetsFile>$(MSBuildToolsPath)\Microsoft.CSharp.targets</CSharpTargetsFile>
+ <CSharpTargetsFile Condition="!Exists('$(CSharpTargetsFile)')">$(MSBuildToolsPath)\Microsoft.CSharp.Targets</CSharpTargetsFile>
+ </PropertyGroup>
+
+ <Import Project="$(MSBuildExtensionsPath32)\Microsoft.CSharp.targets"
+ Condition="'$(TargetFrameworkIdentifier)' == '.NETPortable' and '$(MSBuildProjectExtension)' == '.csproj' and '$(RunningOnCore)' == 'true'" />
+
+ <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets"
+ Condition="'$(TargetFrameworkIdentifier)' == '.NETPortable' and '$(MSBuildProjectExtension)' == '.csproj' and '$(RunningOnCore)' != 'true'" />
+
+
+ <Import Project="$(CSharpTargetsFile)"
+ Condition="'$(TargetFrameworkIdentifier)' != '.NETPortable' and '$(MSBuildProjectExtension)' == '.csproj'" />
+
+ <Import Project="$(MSBuildExtensionsPath32)\Microsoft.VisualBasic.targets"
+ Condition="'$(TargetFrameworkIdentifier)' == '.NETPortable' and '$(MSBuildProjectExtension)' == '.vbproj' and '$(RunningOnCore)' == 'true'" />
+
+
+ <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.VisualBasic.targets"
+ Condition="'$(TargetFrameworkIdentifier)' == '.NETPortable' and '$(MSBuildProjectExtension)' == '.vbproj' and '$(RunningOnCore)' != 'true'" />
+
+ <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets"
+ Condition="'$(TargetFrameworkIdentifier)' != '.NETPortable' and '$(MSBuildProjectExtension)' == '.vbproj'" />
+
+ <PropertyGroup>
+ <!--
+ We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two properties to any folder
+ that exists to skip the GenerateReferenceAssemblyPaths task (not target) and to prevent it from outputting a warning (MSB3644).
+ Need to set these after the common targets import.
+ -->
+ <_TargetFrameworkDirectories>$(MSBuildThisFileDirectory)</_TargetFrameworkDirectories>
+ <_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)</_FullFrameworkReferenceAssemblyPaths>
+ </PropertyGroup>
+
+ <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>
+
+ <!-- Binplacing targets and properties -->
+ <PropertyGroup>
+ <BinPlaceUseHardlinksIfPossible Condition="'$(BinPlaceUseHardlinksIfPossible)' == ''">true</BinPlaceUseHardlinksIfPossible>
+ <EnableBinPlacing Condition="'$(EnableBinPlacing)' == '' AND ('$(BinPlaceRef)' == 'true' OR '$(BinPlaceRuntime)' == 'true' OR '$(BinPlaceTest)' == 'true')">true</EnableBinPlacing>
+ </PropertyGroup>
+
+ <Target Name="BinPlace"
+ DependsOnTargets="GetBinPlaceConfiguration;BinPlaceFiles;BinPlaceProps"
+ AfterTargets="CopyFilesToOutputDirectory"
+ Condition="'$(EnableBinPlacing)' == 'true'" />
+
+ <Target Name="BinPlaceFiles"
+ Condition="'@(BinPlaceDir)' != ''"
+ DependsOnTargets="GetBinPlaceItems"
+ Inputs="@(BinPlaceDir);%(BinPlaceDir.ItemName)"
+ Outputs="unused" >
+
+ <PropertyGroup>
+ <_BinPlaceItemName>%(BinPlaceDir.ItemName)</_BinPlaceItemName>
+ <_BinPlaceItemName Condition="'$(_BinPlaceItemName)' == ''">BinPlaceItem</_BinPlaceItemName>
+ </PropertyGroup>
+
+ <Message Importance="low" Text="BinPlaceDir: @(BinPlaceDir)" />
+
+ <Copy SourceFiles="@($(_BinPlaceItemName))"
+ DestinationFolder="%(BinPlaceDir.Identity)"
+ SkipUnchangedFiles="true"
+ OverwriteReadOnlyFiles="true"
+ Retries="$(CopyRetryCount)"
+ RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
+ UseHardlinksIfPossible="$(BinPlaceUseHardlinksIfPossible)">
+ <Output TaskParameter="DestinationFiles" ItemName="FileWrites" />
+ </Copy>
+ </Target>
+
+ <UsingTask TaskName="SaveItems" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll"/>
+ <Target Name="BinPlaceProps"
+ Condition="'@(PackageFileDir)' != ''"
+ DependsOnTargets="GetBinPlaceItems"
+ Inputs="%(PackageFileDir.Identity);%(PackageFileDir.ItemName)"
+ Outputs="unused" >
+ <ItemGroup>
+ <!-- in the case of an overlapping batch (eg: multiple configurations using same directory)
+ use the first -->
+ <_packageFileDir Include="@(PackageFileDir->Distinct())" />
+ </ItemGroup>
+
+ <PropertyGroup>
+ <_propsFilename>$(TargetName).$(TargetGroup)-$(OSGroup)</_propsFilename>
+ <_propsFilename Condition="'$(TargetName)' == ''">$(MSBuildProjectName).$(TargetGroup)-$(OSGroup)</_propsFilename>
+ <_projectDirLength>$(ProjectDir.Length)</_projectDirLength>
+ </PropertyGroup>
+
+ <PropertyGroup>
+ <_BinPlaceItemName>%(_packageFileDir.ItemName)</_BinPlaceItemName>
+ <_BinPlaceItemName Condition="'$(_BinPlaceItemName)' == ''">BinPlaceItem</_BinPlaceItemName>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <_itemsToSave Include="@($(_BinPlaceItemName))">
+ <!-- intentionally empty: to be set by pkgproj -->
+ <TargetPath></TargetPath>
+ <TargetFramework>%(_packageFileDir.BuildConfiguration_NuGetTargetMonikerShort)</TargetFramework>
+ </_itemsToSave>
+
+ <!-- Include doc files. -->
+ <_docFiles Condition="'$(BinPlaceRef)' == 'true'" Include="$(XmlDocDir)/**/$(TargetName).xml" />
+ <_docFiles>
+ <SubFolder Condition="'%(RecursiveDir)' != ''">/$([System.String]::new('%(RecursiveDir)').TrimEnd('\').TrimEnd('/'))</SubFolder>
+ </_docFiles>
+ <_docFiles>
+ <TargetFramework>%(_packageFileDir.BuildConfiguration_NuGetTargetMonikerShort)</TargetFramework>
+ </_docFiles>
+ <_itemsToSave Include="@(_docFiles)"/>
+
+ <!-- Include source files. -->
+ <!-- Here we use "sources" rather than "src" because MyGet treats packages with "src" as symbol packages -->
+ <_itemsToSave Condition="'@(Compile)' != ''" Include="@(Compile->'%(FullPath)')">
+ <TargetPath>sources</TargetPath>
+ <TargetPath Condition="$([System.String]::Copy('%(FullPath)').StartsWith('$(ProjectDir)'))">sources/$([System.String]::Copy('%(FullPath)').Substring($(_projectDirLength)).Replace('\', '/'))</TargetPath>
+ <IsSourceCodeFile>true</IsSourceCodeFile>
+ </_itemsToSave>
+ </ItemGroup>
+
+ <Message Importance="low" Text="PackageFileDir: @(PackageFileDir)" />
+
+ <SaveItems ItemName="%(_packageFileDir.SaveItemName)"
+ Items="@(_itemsToSave)"
+ Files="%(_packageFileDir.Identity)\$(_propsFilename).props">
+ <Output TaskParameter="Files" ItemName="FileWrites" />
+ </SaveItems>
+ </Target>
+
+ <Target Name="GetBinPlaceItems" DependsOnTargets="GetCopyToOutputDirectoryItems">
+ <ItemGroup>
+ <BinPlaceItem Condition="Exists('$(TargetPath)')" Include="$(TargetPath)" />
+ <BinPlaceItem Condition="Exists('$(TargetDir)$(TargetName).pdb')" Include="$(TargetDir)$(TargetName).pdb" />
+ <BinPlaceItem Condition="'$(BinPlaceReferenceCopyLocalPaths)' != 'false'" Include="@(ReferenceCopyLocalPaths)" />
+ <BinPlaceItem Condition="'$(BinPlaceCopyToOutputDirectoryItems)' != 'false'" Include="@(AllItemsFullPathWithTargetPath)" />
+ </ItemGroup>
+ </Target>
+
+ <UsingTask TaskName="FindBestConfigurations" AssemblyFile="$(BuildToolsTaskDir)Microsoft.DotNet.Build.Tasks.dll"/>
+ <Target Name="GetBinPlaceConfiguration" DependsOnTargets="GetBuildConfigurations">
+ <!-- find which, if any, build configuration of this project is best
+ for each binplace configuration -->
+ <FindBestConfigurations Properties="@(Property)"
+ PropertyValues="@(PropertyValue)"
+ SupportedConfigurations="$(_AllBuildConfigurations)"
+ Configurations="@(BinPlaceConfiguration)">
+ <Output TaskParameter="BestConfigurations" ItemName="_bestBinlaceConfigurations" />
+ </FindBestConfigurations>
+
+ <ItemGroup>
+ <_currentBinPlaceConfigurations Include="@(_bestBinlaceConfigurations)" Condition="'%(Identity)' == '$(Configuration)' OR '%(Identity)-$(ConfigurationGroup)' == '$(Configuration)'" />
+
+ <BinPlaceDir Condition="'$(BinPlaceTest)' == 'true'" Include="@(_currentBinPlaceConfigurations->'%(TestPath)')" />
+ <BinPlaceDir Condition="'$(BinPlaceRuntime)' == 'true'" Include="@(_currentBinPlaceConfigurations->'%(RuntimePath)')" />
+ <BinPlaceDir Condition="'$(BinPlaceRef)' == 'true'" Include="@(_currentBinPlaceConfigurations->'%(RefPath)')" />
+
+ <PackageFileDir Condition="'$(BinPlaceRuntime)' == 'true'" Include="@(_currentBinPlaceConfigurations->'%(PackageFileRuntimePath)')">
+ <SaveItemName Condition="'%(_currentBinPlaceConfigurations.SaveItemName)' == ''">LibFile</SaveItemName>
+ </PackageFileDir>
+ <PackageFileDir Condition="'$(BinPlaceRef)' == 'true'" Include="@(_currentBinPlaceConfigurations->'%(PackageFileRefPath)')">
+ <SaveItemName Condition="'%(_currentBinPlaceConfigurations.SaveItemName)' == ''">RefFile</SaveItemName>
+ </PackageFileDir>
+
+ <!-- permit BinplaceConfigurations to define SetProperties metadata,
+ set those properties when BinplaceConfiguration is active -->
+ <_binplacePropertyTuples Include="%(_currentBinPlaceConfigurations.SetProperties)" />
+
+ <_binplaceSetProperty Condition="'%(_binplacePropertyTuples.Identity)' != ''"
+ Include="$([System.String]::new('%(_binplacePropertyTuples.Identity)').Split('=')[0])">
+ <Value>$([System.String]::new('%(_binplacePropertyTuples.Identity)').Split('=')[1])</Value>
+ </_binplaceSetProperty>
+ </ItemGroup>
+
+ <CreateProperty Value="%(_binplaceSetProperty.Value)" Condition="'@(_binplaceSetProperty)' != ''" >
+ <Output TaskParameter="Value" PropertyName="%(_binplaceSetProperty.Identity)" />
+ </CreateProperty>
+ </Target>
+
+ <!-- IncrementalClean and CoreClean only clean paths under Intermediate or OutDir, handle additional paths -->
+ <ItemGroup>
+ <AdditionalCleanDirectories Include="@(BinPlaceConfiguration->'%(RefPath)')" />
+ <AdditionalCleanDirectories Include="@(BinPlaceConfiguration->'%(RuntimePath)')" />
+ <AdditionalCleanDirectories Include="@(BinPlaceConfiguration->'%(PackageFileRefPath)')" />
+ <AdditionalCleanDirectories Include="@(BinPlaceConfiguration->'%(PackageFileRuntimePath)')" />
+ <AdditionalCleanDirectories Include="@(BinPlaceConfiguration->'%(TestPath)')" />
+ </ItemGroup>
+
+ <Target Name="_CleanGetCurrentAdditionalFileWrites" BeforeTargets="_CleanGetCurrentAndPriorFileWrites" Condition="'@(AdditionalCleanDirectories)' != ''">
+ <!-- find files under paths we care about and add them to _CleanCurrentFileWrites to ensure they are written to the file list -->
+ <FindUnderPath Path="%(AdditionalCleanDirectories.Identity)" Files="@(FileWrites)" UpdateToAbsolutePaths="true">
+ <Output TaskParameter="InPath" ItemName="_CleanCurrentFileWrites" />
+ </FindUnderPath>
+ </Target>
+
+ <!-- delete files under our AdditionalCleanDirectories on Incremental clean -->
+ <Target Name="IncrementalCleanAdditionalDirectories" BeforeTargets="IncrementalClean" Condition="'@(AdditionalCleanDirectories)' != ''">
+ <ItemGroup>
+ <_CleanOrphanAdditionalFileWrites Include="@(_CleanPriorFileWrites)" Exclude="@(_CleanCurrentFileWrites)" />
+ </ItemGroup>
+ <FindUnderPath Path="%(AdditionalCleanDirectories.Identity)" Files="@(_CleanOrphanAdditionalFileWrites)">
+ <Output TaskParameter="InPath" ItemName="_CleanOrphanFileWritesInAdditionalDirectories" />
+ </FindUnderPath>
+
+ <!-- Delete the orphaned files. IncrementalClean will remove these from the file list -->
+ <Delete Files="@(_CleanOrphanFileWritesInAdditionalDirectories)" TreatErrorsAsWarnings="true">
+ <Output TaskParameter="DeletedFiles" ItemName="_CleanOrphanFilesDeleted" />
+ </Delete>
+ </Target>
+
+ <!-- delete files under our AdditionalCleanDirectories on CoreClean -->
+ <Target Name="CleanAdditionalDirectories" AfterTargets="CoreClean" Condition="'@(AdditionalCleanDirectories)' != ''">
+ <FindUnderPath Path="%(AdditionalCleanDirectories.Identity)" Files="@(_CleanUniqueRemainingFileWrites)">
+ <Output TaskParameter="InPath" ItemName="_CleanUniqueRemainingFileWritesInAdditionalDirectories"/>
+ </FindUnderPath>
+
+ <Delete Files="@(_CleanUniqueRemainingFileWritesInAdditionalDirectories)" TreatErrorsAsWarnings="true">
+ <Output TaskParameter="DeletedFiles" ItemName="_CleanUniqueRemainingFileWritesInAdditionalDirectoriesDeleted" />
+ </Delete>
+
+ <!-- Create a list of everything that wasn't deleted. -->
+ <ItemGroup>
+ <_CleanRemainingFileWritesAfterCleanAdditionalDirectories Include="@(_CleanUniqueRemainingFileWrites)" Exclude="@(_CleanUniqueRemainingFileWritesInAdditionalDirectoriesDeleted)"/>
+ </ItemGroup>
+
+ <!-- Remove duplicates. -->
+ <RemoveDuplicates Inputs="@(_CleanRemainingFileWritesAfterCleanAdditionalDirectories)">
+ <Output TaskParameter="Filtered" ItemName="_CleanAdditionalDirectoriesUniqueRemainingFileWrites"/>
+ </RemoveDuplicates>
+
+ <!-- Make sure the directory exists. -->
+ <MakeDir Directories="$(IntermediateOutputPath)"/>
+
+ <!-- Write new list of current files back to disk. -->
+ <WriteLinesToFile File="$(IntermediateOutputPath)$(CleanFile)" Lines="@(_CleanAdditionalDirectoriesUniqueRemainingFileWrites)" Overwrite="true" />
+ </Target>
+
+</Project>