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 HandleDebugMessage(DebugData debugData) (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 struct FileAccessData ReportedFileOperation operation, RequestedAccess requestedAccess, uint processId, + uint id, + uint correlationId, uint error, DesiredAccess desiredAccess, FlagsAndAttributes flagsAndAttributes, @@ -38,6 +41,8 @@ public struct 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)"/>