From 18d6582b1c8c276c5369c1a4bece3cd3b6489e57 Mon Sep 17 00:00:00 2001 From: Sujit Nayak Date: Fri, 1 Dec 2023 17:22:00 -0800 Subject: [PATCH 1/2] [ClickOnce] Consider CopyToPublishDirectory property before publishing content items --- src/Tasks/Microsoft.Common.CurrentVersion.targets | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Tasks/Microsoft.Common.CurrentVersion.targets b/src/Tasks/Microsoft.Common.CurrentVersion.targets index 1ed602b0251..d6bd6a825b7 100644 --- a/src/Tasks/Microsoft.Common.CurrentVersion.targets +++ b/src/Tasks/Microsoft.Common.CurrentVersion.targets @@ -4479,23 +4479,30 @@ Copyright (C) Microsoft Corporation. All rights reserved. either have the .exe/.dll extension or their publish status has been overriden in VS so they will show up in the PublishFiles collection. The PublishProtocol property is available only in .NET>=5 so we will used that to exclude .NET FX 4.X case. --> - <_ClickOnceTransitiveContentItemsTemp Include="@(_TransitiveItemsToCopyToOutputDirectory->'%(TargetPath)')" Condition="'$(PublishProtocol)' == 'ClickOnce'" > + <_ClickOnceTransitiveContentItemsTemp Include="@(_TransitiveItemsToCopyToOutputDirectory->'%(TargetPath)')" Condition="'$(PublishProtocol)' == 'ClickOnce' AND '%(_TransitiveItemsToCopyToOutputDirectory.CopyToPublishDirectory)' != 'Never'" > %(Identity) <_ClickOnceTransitiveContentItems Include="@(_ClickOnceTransitiveContentItemsTemp->'%(SavedIdentity)')" Condition="'%(Identity)'=='@(PublishFile)' Or '%(Extension)'=='.exe' Or '%(Extension)'=='.dll'" /> + + <_ClickOnceContentItems Include="@(ContentWithTargetPath)" Condition="'%(ContentWithTargetPath.CopyToPublishDirectory)' != 'Never'" /> + <_ClickOnceContentItems Include="@(_ClickOnceTransitiveContentItems)" /> + - <_ClickOnceNoneItemsTemp Include="@(_NoneWithTargetPath->'%(TargetPath)')" Condition="'$(PublishProtocol)'=='Clickonce' And ('%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest')"> + <_ClickOnceNoneItemsTemp Include="@(_NoneWithTargetPath->'%(TargetPath)')" Condition="'$(PublishProtocol)'=='Clickonce' And '%(_NoneWithTargetPath.CopyToPublishDirectory)' != 'Never' And ('%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest')"> %(Identity) <_ClickOnceNoneItems Include="@(_ClickOnceNoneItemsTemp->'%(SavedIdentity)')" Condition="'%(Identity)'=='@(PublishFile)' Or '%(Extension)'=='.exe' Or '%(Extension)'=='.dll'" /> - <_ClickOnceFiles Include="@(ContentWithTargetPath);@(_DeploymentManifestIconFile);@(AppConfigWithTargetPath);@(NetCoreRuntimeJsonFilesForClickOnce);@(_ClickOnceRuntimeCopyLocalItems);@(_ClickOnceNoneItems);@(_ClickOnceTransitiveContentItems)"/> + <_ClickOnceFiles Include="@(_ClickOnceContentItems);@(_DeploymentManifestIconFile);@(AppConfigWithTargetPath);@(NetCoreRuntimeJsonFilesForClickOnce);@(_ClickOnceRuntimeCopyLocalItems);@(_ClickOnceNoneItems)" /> From b79c1c7bc60d17b43b11dd7af307fab4a8039bfa Mon Sep 17 00:00:00 2001 From: Sujit Nayak Date: Tue, 9 Jan 2024 10:35:42 -0800 Subject: [PATCH 2/2] for c/r --- src/Tasks/Microsoft.Common.CurrentVersion.targets | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Tasks/Microsoft.Common.CurrentVersion.targets b/src/Tasks/Microsoft.Common.CurrentVersion.targets index d6bd6a825b7..c3d092cf024 100644 --- a/src/Tasks/Microsoft.Common.CurrentVersion.targets +++ b/src/Tasks/Microsoft.Common.CurrentVersion.targets @@ -4479,7 +4479,7 @@ Copyright (C) Microsoft Corporation. All rights reserved. either have the .exe/.dll extension or their publish status has been overriden in VS so they will show up in the PublishFiles collection. The PublishProtocol property is available only in .NET>=5 so we will used that to exclude .NET FX 4.X case. --> - <_ClickOnceTransitiveContentItemsTemp Include="@(_TransitiveItemsToCopyToOutputDirectory->'%(TargetPath)')" Condition="'$(PublishProtocol)' == 'ClickOnce' AND '%(_TransitiveItemsToCopyToOutputDirectory.CopyToPublishDirectory)' != 'Never'" > + <_ClickOnceTransitiveContentItemsTemp Include="@(_TransitiveItemsToCopyToOutputDirectory->WithoutMetadataValue('CopyToPublishDirectory', 'Never')->'%(TargetPath)')" Condition="'$(PublishProtocol)' == 'ClickOnce'" > %(Identity) <_ClickOnceTransitiveContentItems Include="@(_ClickOnceTransitiveContentItemsTemp->'%(SavedIdentity)')" Condition="'%(Identity)'=='@(PublishFile)' Or '%(Extension)'=='.exe' Or '%(Extension)'=='.dll'" /> @@ -4488,7 +4488,7 @@ Copyright (C) Microsoft Corporation. All rights reserved. ClickOnce content items is union of transitive content items and content items from this project. We also exclude content items from this project that have set CopyToPublishDirectory to Never. --> - <_ClickOnceContentItems Include="@(ContentWithTargetPath)" Condition="'%(ContentWithTargetPath.CopyToPublishDirectory)' != 'Never'" /> + <_ClickOnceContentItems Include="@(ContentWithTargetPath->WithoutMetadataValue('CopyToPublishDirectory', 'Never'))" /> <_ClickOnceContentItems Include="@(_ClickOnceTransitiveContentItems)" /> - <_ClickOnceNoneItemsTemp Include="@(_NoneWithTargetPath->'%(TargetPath)')" Condition="'$(PublishProtocol)'=='Clickonce' And '%(_NoneWithTargetPath.CopyToPublishDirectory)' != 'Never' And ('%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest')"> + <_ClickOnceNoneItemsTemp Include="@(_NoneWithTargetPath->WithoutMetadataValue('CopyToPublishDirectory', 'Never')->'%(TargetPath)')" Condition="'$(PublishProtocol)'=='Clickonce' And ('%(_NoneWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_NoneWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest')"> %(Identity) <_ClickOnceNoneItems Include="@(_ClickOnceNoneItemsTemp->'%(SavedIdentity)')" Condition="'%(Identity)'=='@(PublishFile)' Or '%(Extension)'=='.exe' Or '%(Extension)'=='.dll'" /> <_ClickOnceFiles Include="@(_ClickOnceContentItems);@(_DeploymentManifestIconFile);@(AppConfigWithTargetPath);@(NetCoreRuntimeJsonFilesForClickOnce);@(_ClickOnceRuntimeCopyLocalItems);@(_ClickOnceNoneItems)" /> + + + <_ClickOnceNoneItemsTemp Remove="@(_ClickOnceNoneItemsTemp)"/> + <_ClickOnceNoneItems Remove="@(_ClickOnceNoneItems)"/> + <_ClickOnceTransitiveContentItemsTemp Remove="@(_ClickOnceTransitiveContentItemsTemp)"/> + <_ClickOnceTransitiveContentItems Remove="@(_ClickOnceTransitiveContentItems)"/> + <_ClickOnceContentItems Remove="@(_ClickOnceContentItems)"/> + <_ClickOnceRuntimeCopyLocalItems Remove="@(_ClickOnceRuntimeCopyLocalItems)"/>