Open
Description
In some circumstances on up-to-date Windows 11, the Copy task retries copies that fail due to path-too-long errors instead of emitting a nice "the path is too long" error on the first attempt.
Repro project:
<Project>
<Target Name="Copy">
<Copy
SourceFiles="$(MSBuildThisFileFullPath)"
DestinationFolder="VeryLongFolderName\ThatExceeds260\Characters\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ContinueOnError="ErrorAndContinue" />
<Copy
SourceFiles="$(MSBuildThisFileFullPath)"
DestinationFolder="12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.1" />
</Target>
</Project>
On Windows 11 (22000.258) with Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled
set to 0
(docs on LongPathsEnabled), I see:
❯ msbuild /clp:nosummary
Microsoft (R) Build Engine version 17.1.0-preview-21552-01+24b33188f for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 11/5/2021 3:12:40 PM.
Project "S:\play\max_path_copy\MaxPathCopy.proj" on node 1 (default targets).
Copy:
Copying file from "S:\play\max_path_copy\MaxPathCopy.proj" to "VeryLongFolderName\ThatExceeds260\Characters\ABCDEFGHI
JKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQR
STUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\MaxPathCopy.proj".
S:\play\max_path_copy\MaxPathCopy.proj(3,5): warning MSB3026: Could not copy "S:\play\max_path_copy\MaxPathCopy.proj" t
o "VeryLongFolderName\ThatExceeds260\Characters\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQ
RSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\M
axPathCopy.proj". Beginning retry 1 in 1000ms. Could not find a part of the path 'VeryLongFolderName\ThatExceeds260\Cha
racters\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABC
DEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\MaxPathCopy.proj'.
Copying file from "S:\play\max_path_copy\MaxPathCopy.proj" to "VeryLongFolderName\ThatExceeds260\Characters\ABCDEFGHI
JKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQR
STUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\MaxPathCopy.proj".
S:\play\max_path_copy\MaxPathCopy.proj(3,5): warning MSB3026: Could not copy "S:\play\max_path_copy\MaxPathCopy.proj" t
o "VeryLongFolderName\ThatExceeds260\Characters\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQ
RSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\M
axPathCopy.proj". Beginning retry 2 in 1000ms. Could not find a part of the path 'VeryLongFolderName\ThatExceeds260\Cha
racters\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABC
DEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\MaxPathCopy.proj'.
Copying file from "S:\play\max_path_copy\MaxPathCopy.proj" to "VeryLongFolderName\ThatExceeds260\Characters\ABCDEFGHI
JKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQR
STUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\MaxPathCopy.proj".
S:\play\max_path_copy\MaxPathCopy.proj(3,5): error MSB3027: Could not copy "S:\play\max_path_copy\MaxPathCopy.proj" to
"VeryLongFolderName\ThatExceeds260\Characters\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRS
TUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\Max
PathCopy.proj". Exceeded retry count of 2. Failed.
S:\play\max_path_copy\MaxPathCopy.proj(3,5): error MSB3021: Unable to copy file "S:\play\max_path_copy\MaxPathCopy.proj
" to "VeryLongFolderName\ThatExceeds260\Characters\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMN
OPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXY
Z\MaxPathCopy.proj". Could not find a part of the path 'VeryLongFolderName\ThatExceeds260\Characters\ABCDEFGHIJKLMNOPQR
STUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\AB
CDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\MaxPathCopy.proj'.
Build continuing because "ContinueOnError" on the task "Copy" is set to "ErrorAndContinue".
Creating directory "12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\123456
78.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\123456
78.123\12345678.123\12345678.1".
S:\play\max_path_copy\MaxPathCopy.proj(8,5): error MSB3021: Unable to copy file "S:\play\max_path_copy\MaxPathCopy.proj
" to "12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.
123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.12
3\12345678.1\MaxPathCopy.proj". The specified path, file name, or both are too long. The fully qualified file name must
be less than 260 characters, and the directory name must be less than 248 characters.
Done Building Project "S:\play\max_path_copy\MaxPathCopy.proj" (default targets) -- FAILED.
However this does seem to vary by Windows version; on Server 2016 (14393) I see:
$ msbuild -clp:NoSummary
Microsoft (R) Build Engine version 17.0.0+c9eb9dd64 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 11/5/2021 8:14:52 PM.
Project "C:\max_path_thing\MaxPathCopy.proj" on node 1 (default targets).
Copy:
Creating directory "VeryLongFolderName\ThatExceeds260\Characters\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXY
Z\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFG
HIJKLMNOPQRSTUVWXYZ".
C:\max_path_thing\MaxPathCopy.proj(3,5): error MSB3021: Unable to copy file "C:\max_path_thing\MaxPathCopy.proj" to "Ve
ryLongFolderName\ThatExceeds260\Characters\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUV
WXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\ABCDEFGHIJKLMNOPQRSTUVWXYZ\MaxPat
hCopy.proj". The specified path, file name, or both are too long. The fully qualified file name must be less than 260 c
haracters, and the directory name must be less than 248 characters.
Build continuing because "ContinueOnError" on the task "Copy" is set to "ErrorAndContinue".
Creating directory "12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\123456
78.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\123456
78.123\12345678.123\12345678.1".
C:\max_path_thing\MaxPathCopy.proj(8,5): error MSB3021: Unable to copy file "C:\max_path_thing\MaxPathCopy.proj" to "12
345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\1234
5678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\12345678.123\123456
78.1\MaxPathCopy.proj". The specified path, file name, or both are too long. The fully qualified file name must be less
than 260 characters, and the directory name must be less than 248 characters.
Done Building Project "C:\max_path_thing\MaxPathCopy.proj" (default targets) -- FAILED.