Skip to content

Retries and unclear errors from Copy when long paths are not enabled in Windows #7019

Open
@rainersigwald

Description

@rainersigwald

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area: TasksIssues impacting the tasks shipped in Microsoft.Build.Tasks.Core.dll.OS: WindowsIssues that only impact users on Windows.Partner requesttriaged

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions