diff --git a/src/Build.UnitTests/BackEnd/TaskHostTaskComplete_Tests.cs b/src/Build.UnitTests/BackEnd/TaskHostTaskComplete_Tests.cs
index 23cf234576d..b6b6025441b 100644
--- a/src/Build.UnitTests/BackEnd/TaskHostTaskComplete_Tests.cs
+++ b/src/Build.UnitTests/BackEnd/TaskHostTaskComplete_Tests.cs
@@ -32,8 +32,10 @@ public void TestConstructors()
new FileAccessData(
ReportedFileOperation.CreateFile,
RequestedAccess.Read,
- 0,
- 0,
+ processId: 123,
+ id: 1,
+ correlationId: 0,
+ error: 0,
DesiredAccess.GENERIC_READ,
FlagsAndAttributes.FILE_ATTRIBUTE_NORMAL,
"foo",
diff --git a/src/Build/BackEnd/Components/Communications/DetouredNodeLauncher.cs b/src/Build/BackEnd/Components/Communications/DetouredNodeLauncher.cs
index a10c7b4eb8b..8bfb43b1ecb 100644
--- a/src/Build/BackEnd/Components/Communications/DetouredNodeLauncher.cs
+++ b/src/Build/BackEnd/Components/Communications/DetouredNodeLauncher.cs
@@ -173,6 +173,8 @@ public override void HandleFileAccess(FileAccessData fileAccessData) => _fileAcc
(Experimental.FileAccess.ReportedFileOperation)fileAccessData.Operation,
(Experimental.FileAccess.RequestedAccess)fileAccessData.RequestedAccess,
fileAccessData.ProcessId,
+ fileAccessData.Id,
+ fileAccessData.CorrelationId,
fileAccessData.Error,
(Experimental.FileAccess.DesiredAccess)fileAccessData.DesiredAccess,
(Experimental.FileAccess.FlagsAndAttributes)fileAccessData.FlagsAndAttributes,
diff --git a/src/Build/CompatibilitySuppressions.xml b/src/Build/CompatibilitySuppressions.xml
index 8497df99fb3..85a8e28b087 100644
--- a/src/Build/CompatibilitySuppressions.xml
+++ b/src/Build/CompatibilitySuppressions.xml
@@ -260,4 +260,33 @@
ref/net8.0/Microsoft.Build.dll
true
+
+
+ CP0002
+ M:Microsoft.Build.Experimental.FileAccess.FileAccessData.#ctor(Microsoft.Build.Experimental.FileAccess.ReportedFileOperation,Microsoft.Build.Experimental.FileAccess.RequestedAccess,System.UInt32,System.UInt32,Microsoft.Build.Experimental.FileAccess.DesiredAccess,Microsoft.Build.Experimental.FileAccess.FlagsAndAttributes,System.String,System.String,System.Boolean)
+ lib/net472/Microsoft.Build.dll
+ lib/net472/Microsoft.Build.dll
+ true
+
+
+ CP0002
+ M:Microsoft.Build.Experimental.FileAccess.FileAccessData.#ctor(Microsoft.Build.Experimental.FileAccess.ReportedFileOperation,Microsoft.Build.Experimental.FileAccess.RequestedAccess,System.UInt32,System.UInt32,Microsoft.Build.Experimental.FileAccess.DesiredAccess,Microsoft.Build.Experimental.FileAccess.FlagsAndAttributes,System.String,System.String,System.Boolean)
+ lib/net8.0/Microsoft.Build.dll
+ lib/net8.0/Microsoft.Build.dll
+ true
+
+
+ CP0002
+ M:Microsoft.Build.Experimental.FileAccess.FileAccessData.#ctor(Microsoft.Build.Experimental.FileAccess.ReportedFileOperation,Microsoft.Build.Experimental.FileAccess.RequestedAccess,System.UInt32,System.UInt32,Microsoft.Build.Experimental.FileAccess.DesiredAccess,Microsoft.Build.Experimental.FileAccess.FlagsAndAttributes,System.String,System.String,System.Boolean)
+ ref/net472/Microsoft.Build.dll
+ ref/net472/Microsoft.Build.dll
+ true
+
+
+ CP0002
+ M:Microsoft.Build.Experimental.FileAccess.FileAccessData.#ctor(Microsoft.Build.Experimental.FileAccess.ReportedFileOperation,Microsoft.Build.Experimental.FileAccess.RequestedAccess,System.UInt32,System.UInt32,Microsoft.Build.Experimental.FileAccess.DesiredAccess,Microsoft.Build.Experimental.FileAccess.FlagsAndAttributes,System.String,System.String,System.Boolean)
+ ref/net8.0/Microsoft.Build.dll
+ ref/net8.0/Microsoft.Build.dll
+ true
+
\ No newline at end of file
diff --git a/src/Build/FileAccess/FileAccessData.cs b/src/Build/FileAccess/FileAccessData.cs
index 64cd45a92d4..7d66385def7 100644
--- a/src/Build/FileAccess/FileAccessData.cs
+++ b/src/Build/FileAccess/FileAccessData.cs
@@ -2,7 +2,6 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
-
using Microsoft.Build.BackEnd;
namespace Microsoft.Build.Experimental.FileAccess
@@ -17,6 +16,8 @@ public struct FileAccessData
private ReportedFileOperation _operation;
private RequestedAccess _requestedAccess;
private uint _processId;
+ private uint _id;
+ private uint _correlationId;
private uint _error;
private DesiredAccess _desiredAccess;
private FlagsAndAttributes _flagsAndAttributes;
@@ -28,6 +29,8 @@ public FileAccessData(
ReportedFileOperation operation,
RequestedAccess requestedAccess,
uint processId,
+ uint id,
+ uint correlationId,
uint error,
DesiredAccess desiredAccess,
FlagsAndAttributes flagsAndAttributes,
@@ -38,6 +41,8 @@ public FileAccessData(
_operation = operation;
_requestedAccess = requestedAccess;
_processId = processId;
+ _id = id;
+ _correlationId = correlationId;
_error = error;
_desiredAccess = desiredAccess;
_flagsAndAttributes = flagsAndAttributes;
@@ -56,7 +61,7 @@ public ReportedFileOperation Operation
/// The requested access.
public RequestedAccess RequestedAccess
{
- get => _requestedAccess;
+ readonly get => _requestedAccess;
private set => _requestedAccess = value;
}
@@ -67,6 +72,22 @@ public uint ProcessId
private set => _processId = value;
}
+ /// Id of file access.
+ public uint Id
+ {
+ readonly get => _id;
+ private set => _id = value;
+ }
+
+
+ /// Correlation id of file access.
+ public uint CorrelationId
+ {
+ readonly get => _correlationId;
+ private set => _correlationId = value;
+ }
+
+
/// The error code of the operation.
public uint Error
{
@@ -114,6 +135,8 @@ void ITranslatable.Translate(ITranslator translator)
translator.TranslateEnum(ref _operation, (int)_operation);
translator.TranslateEnum(ref _requestedAccess, (int)_requestedAccess);
translator.Translate(ref _processId);
+ translator.Translate(ref _id);
+ translator.Translate(ref _correlationId);
translator.Translate(ref _error);
translator.TranslateEnum(ref _desiredAccess, (int)_desiredAccess);
translator.TranslateEnum(ref _flagsAndAttributes, (int)_flagsAndAttributes);
diff --git a/src/Tasks/Microsoft.Common.CurrentVersion.targets b/src/Tasks/Microsoft.Common.CurrentVersion.targets
index 7ea4d4d06fb..ec090857272 100644
--- a/src/Tasks/Microsoft.Common.CurrentVersion.targets
+++ b/src/Tasks/Microsoft.Common.CurrentVersion.targets
@@ -4491,23 +4491,38 @@ 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->WithoutMetadataValue('CopyToPublishDirectory', 'Never')->'%(TargetPath)')" Condition="'$(PublishProtocol)' == 'ClickOnce'" >
%(Identity)
<_ClickOnceTransitiveContentItems Include="@(_ClickOnceTransitiveContentItemsTemp->'%(SavedIdentity)')" Condition="'%(Identity)'=='@(PublishFile)' Or '%(Extension)'=='.exe' Or '%(Extension)'=='.dll'" />
+
+ <_ClickOnceContentItems Include="@(ContentWithTargetPath->WithoutMetadataValue('CopyToPublishDirectory', 'Never'))" />
+ <_ClickOnceContentItems Include="@(_ClickOnceTransitiveContentItems)" />
+
- <_ClickOnceNoneItemsTemp Include="@(_NoneWithTargetPath->'%(TargetPath)')" Condition="'$(PublishProtocol)'=='Clickonce' 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="@(ContentWithTargetPath);@(_DeploymentManifestIconFile);@(AppConfigWithTargetPath);@(NetCoreRuntimeJsonFilesForClickOnce);@(_ClickOnceRuntimeCopyLocalItems);@(_ClickOnceNoneItems);@(_ClickOnceTransitiveContentItems)"/>
+ <_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)"/>