diff --git a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.Publish.targets b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.Publish.targets index f5d5181b2ebb..0b392f857100 100644 --- a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.Publish.targets +++ b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.Publish.targets @@ -200,6 +200,7 @@ Copyright (c) .NET Foundation. All rights reserved. <_PublishStaticWebAssetsCopyAlways Include="@(_PublishStaticWebAssetsTargetPath)" Condition="'%(CopyToPublishDirectory)' == 'Always'" /> <_PublishStaticWebAssetsPreserveNewest Include="@(_PublishStaticWebAssetsTargetPath)" Condition="'%(CopyToPublishDirectory)' == 'PreserveNewest'" /> + <_PublishStaticWebAssetsIfDifferent Include="@(_PublishStaticWebAssetsTargetPath)" Condition="'%(CopyToPublishDirectory)' == 'IfDifferent'" /> @@ -207,7 +208,8 @@ Copyright (c) .NET Foundation. All rights reserved. + AfterTargets="_SplitPublishStaticWebAssetsByCopyOptions" + Condition=" '@(_PublishStaticWebAssetsPreserveNewest)' != '' "> + AfterTargets="_SplitPublishStaticWebAssetsByCopyOptions" + Condition=" '@(_PublishStaticWebAssetsCopyAlways)' != '' "> + + + + + + + + + + + diff --git a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets index 0fb3afa2fbc2..c3e5fad9ab49 100644 --- a/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets +++ b/src/StaticWebAssetsSdk/Targets/Microsoft.NET.Sdk.StaticWebAssets.targets @@ -498,6 +498,7 @@ Copyright (c) .NET Foundation. All rights reserved. <_BuildStaticWebAssetsCopyAlways Include="@(_BuildStaticWebAssetsTargetPath)" Condition="'%(CopyToOutputDirectory)' == 'Always'" /> <_BuildStaticWebAssetsPreserveNewest Include="@(_BuildStaticWebAssetsTargetPath)" Condition="'%(CopyToOutputDirectory)' == 'PreserveNewest'" /> + <_BuildStaticWebAssetsIfDifferent Include="@(_BuildStaticWebAssetsTargetPath)" Condition="'%(CopyToOutputDirectory)' == 'IfDifferent'" /> @@ -537,8 +538,29 @@ Copyright (c) .NET Foundation. All rights reserved. + + + + + + + + + + + - + <_UpToDateCheckStaticWebAssetCandidate Include="@(StaticWebAsset)" Condition="'%(SourceType)' == 'Discovered'" /> diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets index 728f17b43132..487dc196fb04 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets @@ -268,6 +268,7 @@ Copyright (c) .NET Foundation. All rights reserved. DependsOnTargets="_IncrementalCleanPublishDirectory; _CopyResolvedFilesToPublishPreserveNewest; _CopyResolvedFilesToPublishAlways; + _CopyResolvedFilesToPublishIfDifferent; _HandleFileConflictsForPublish" /> + + + + + + + + + @@ -431,7 +459,7 @@ Copyright (c) .NET Foundation. All rights reserved. ============================================================ _ComputeResolvedFilesToPublishTypes - Splits ResolvedFileToPublish items into 'PreserveNewest' and 'Always' buckets. + Splits ResolvedFileToPublish items into 'PreserveNewest', 'Always' and 'IfDifferent' buckets. Then further splits those into 'Unbundled' buckets based on the single file setting. ============================================================ --> @@ -443,6 +471,9 @@ Copyright (c) .NET Foundation. All rights reserved. <_ResolvedFileToPublishAlways Include="@(ResolvedFileToPublish)" Condition="'%(ResolvedFileToPublish.CopyToPublishDirectory)'=='Always'" /> + + <_ResolvedFileToPublishIfDifferent Include="@(ResolvedFileToPublish)" + Condition="'%(ResolvedFileToPublish.CopyToPublishDirectory)'=='IfDifferent'" /> @@ -456,6 +487,11 @@ Copyright (c) .NET Foundation. All rights reserved. Include="@(_ResolvedFileToPublishAlways)" Condition="'$(PublishSingleFile)' != 'true' or '%(_ResolvedFileToPublishAlways.ExcludeFromSingleFile)'=='true'" /> + + <_ResolvedUnbundledFileToPublishIfDifferent + Include="@(_ResolvedFileToPublishIfDifferent)" + Condition="'$(PublishSingleFile)' != 'true' or + '%(_ResolvedFileToPublishIfDifferent.ExcludeFromSingleFile)'=='true'" /> @@ -784,6 +820,12 @@ Copyright (c) .NET Foundation. All rights reserved. PreserveNewest True + + + %(_SourceItemsToCopyToPublishDirectoryIfDifferent.TargetPath) + IfDifferent + True + @@ -845,6 +887,10 @@ Copyright (c) .NET Foundation. All rights reserved. KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_AllChildProjectPublishItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectPublishItemsWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'"/> + <_SourceItemsToCopyToPublishDirectoryIfDifferent KeepDuplicates=" '$(_GCTPDIKeepDuplicates)' != 'false' " + KeepMetadata="$(_GCTPDIKeepMetadata)" + Include="@(_AllChildProjectPublishItemsWithTargetPath->'%(FullPath)')" + Condition="'%(_AllChildProjectPublishItemsWithTargetPath.CopyToPublishDirectory)'=='IfDifferent'"/> @@ -860,6 +906,9 @@ Copyright (c) .NET Foundation. All rights reserved. <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(ContentWithTargetPath->'%(FullPath)')" Condition="'%(ContentWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'"/> + <_SourceItemsToCopyToPublishDirectoryIfDifferent KeepMetadata="$(_GCTPDIKeepMetadata)" + Include="@(ContentWithTargetPath->'%(FullPath)')" + Condition="'%(ContentWithTargetPath.CopyToPublishDirectory)'=='IfDifferent'"/> @@ -869,11 +918,14 @@ Copyright (c) .NET Foundation. All rights reserved. <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(EmbeddedResource->'%(FullPath)')" Condition="'%(EmbeddedResource.CopyToPublishDirectory)'=='PreserveNewest'"/> + <_SourceItemsToCopyToPublishDirectoryIfDifferent KeepMetadata="$(_GCTPDIKeepMetadata)" + Include="@(EmbeddedResource->'%(FullPath)')" + Condition="'%(EmbeddedResource.CopyToPublishDirectory)'=='IfDifferent'"/> <_CompileItemsToPublish Include="@(Compile->'%(FullPath)')" - Condition="'%(Compile.CopyToPublishDirectory)'=='Always' or '%(Compile.CopyToPublishDirectory)'=='PreserveNewest'"/> + Condition="'%(Compile.CopyToPublishDirectory)'=='Always' or '%(Compile.CopyToPublishDirectory)'=='PreserveNewest'" or '%(Compile.CopyToPublishDirectory)'=='IfDifferent'"/> @@ -887,6 +939,9 @@ Copyright (c) .NET Foundation. All rights reserved. <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_CompileItemsToPublishWithTargetPath)" Condition="'%(_CompileItemsToPublishWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'"/> + <_SourceItemsToCopyToPublishDirectoryIfDifferent KeepMetadata="$(_GCTPDIKeepMetadata)" + Include="@(_CompileItemsToPublishWithTargetPath)" + Condition="'%(_CompileItemsToPublishWithTargetPath.CopyToPublishDirectory)'=='IfDifferent'"/> @@ -896,12 +951,16 @@ Copyright (c) .NET Foundation. All rights reserved. <_SourceItemsToCopyToPublishDirectory KeepMetadata="$(_GCTPDIKeepMetadata)" Include="@(_NoneWithTargetPath->'%(FullPath)')" Condition="'%(_NoneWithTargetPath.CopyToPublishDirectory)'=='PreserveNewest'"/> + <_SourceItemsToCopyToPublishDirectoryIfDifferent KeepMetadata="$(_GCTPDIKeepMetadata)" + Include="@(_NoneWithTargetPath->'%(FullPath)')" + Condition="'%(_NoneWithTargetPath.CopyToPublishDirectory)'=='IfDifferent'"/> <_SourceItemsToCopyToPublishDirectoryAlways Remove="$(AppHostIntermediatePath)" /> <_SourceItemsToCopyToPublishDirectory Remove="$(AppHostIntermediatePath)" /> + <_SourceItemsToCopyToPublishDirectoryIfDifferent Remove="$(AppHostIntermediatePath)" /> <_SourceItemsToCopyToPublishDirectoryAlways Include="$(SingleFileHostIntermediatePath)" CopyToOutputDirectory="Always" TargetPath="$(AssemblyName)$(_NativeExecutableExtension)" /> @@ -911,13 +970,14 @@ Copyright (c) .NET Foundation. All rights reserved. <_SourceItemsToCopyToPublishDirectoryAlways Remove="$(AppHostIntermediatePath)" /> <_SourceItemsToCopyToPublishDirectory Remove="$(AppHostIntermediatePath)" /> + <_SourceItemsToCopyToPublishDirectoryIfDifferent Remove="$(AppHostIntermediatePath)" /> <_SourceItemsToCopyToPublishDirectoryAlways Include="$(AppHostForPublishIntermediatePath)" CopyToOutputDirectory="Always" TargetPath="$(AssemblyName)$(_NativeExecutableExtension)" /> - + @@ -927,7 +987,7 @@ Copyright (c) .NET Foundation. All rights reserved. DefaultCopyToPublishDirectoryMetadata If CopyToPublishDirectory isn't set on these items, the value should be taken from CopyToOutputDirectory. - This way, projects can just set "CopyToOutputDirectory = Always/PreserveNewest" and by default the item will be copied + This way, projects can just set "CopyToOutputDirectory = Always/PreserveNewest/IfDifferent" and by default the item will be copied to both the build output and publish directories. ============================================================ --> @@ -942,6 +1002,9 @@ Copyright (c) .NET Foundation. All rights reserved. PreserveNewest + + IfDifferent + Always @@ -949,6 +1012,9 @@ Copyright (c) .NET Foundation. All rights reserved. PreserveNewest + + IfDifferent + Always @@ -956,6 +1022,9 @@ Copyright (c) .NET Foundation. All rights reserved. PreserveNewest + + IfDifferent + <_NoneWithTargetPath Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' and '%(_NoneWithTargetPath.CopyToPublishDirectory)' == ''"> Always @@ -963,6 +1032,9 @@ Copyright (c) .NET Foundation. All rights reserved. <_NoneWithTargetPath Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest' and '%(_NoneWithTargetPath.CopyToPublishDirectory)' == ''"> PreserveNewest + <_NoneWithTargetPath Condition="'%(_NoneWithTargetPath.CopyToOutputDirectory)'=='IfDifferent' and '%(_NoneWithTargetPath.CopyToPublishDirectory)' == ''"> + IfDifferent +