dotnet / project-system

The .NET Project System for Visual Studio
MIT License
968 stars 386 forks source link

Build acceleration clears read only flag of copied files #9358

Closed drewnoakes closed 9 months ago

drewnoakes commented 9 months ago

Fixes AB#1934681

When a CopyToOutputDirectory source item is read only, MSBuild copies the file but clears the read only attribute.

Build Acceleration is a feature that mimics builds in MSBuild and therefore must also clear this flag.

Without doing so, errors can be seen in the output window during build:

Build started at 4:35 PM...
1>FastUpToDate: Exception copying file, scheduling MSBuild: System.UnauthorizedAccessException: Access to the path 'D:\repos\issues\Ticket1934681BuildAccelerationCopyReadOnlyFiles\Ticket1934681BuildAccelerationCopyReadOnlyFiles\bin\Debug\net8.0\ReadOnly.txt' is denied.
1>   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
1>   at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)
1>   at Microsoft.VisualStudio.ProjectSystem.VS.UpToDate.BuildUpToDateCheck.FileSystemOperationAggregator.TryApplyFileSystemOperations() (Ticket1934681BuildAccelerationCopyReadOnlyFiles)
1>------ Build started: Project: Ticket1934681BuildAccelerationCopyReadOnlyFiles, Configuration: Debug Any CPU ------
1>C:\Program Files\dotnet\sdk\8.0.200-preview.23620.12\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(311,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy
1>C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(5239,5): error MSB3021: Unable to copy file "D:\repos\issues\Ticket1934681BuildAccelerationCopyReadOnlyFiles\Ticket1934681BuildAccelerationCopyReadOnlyFiles\ReadOnly.txt" to "bin\Debug\net8.0\ReadOnly.txt". Access to the path 'bin\Debug\net8.0\ReadOnly.txt' is denied.
1>Done building project "Ticket1934681BuildAccelerationCopyReadOnlyFiles.csproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build completed at 4:35 PM and took 00.569 seconds ==========
Visual Studio accelerated 1 project(s), copying 0 file(s). See https://aka.ms/vs-build-acceleration.

This problem is particularly important for users of version control systems that lock files on disk, such as VSS and Perforce.

Microsoft Reviewers: Open in CodeFlow