Visual Studio未知的构建错误。完全限定名称必须少于260个字符。

44

我在构建WPF解决方案时遇到了问题。每次尝试构建时,都会收到以下错误消息:

未知的构建错误,“指定的路径、文件名或两者都太长。完全限定的文件名必须少于260个字符,并且目录名必须少于248个字符。”

有人能帮我吗?我已经验证了所有字段及其扩展路径,一切正常。这可能是TortoiseSVN或类似问题导致的吗?我最近添加了一个文件夹到我的解决方案中,这可能与此有关吗?


我不确定它是否有帮助 - 请查看此解决方案:http://iwillsharemypoint.blogspot.co.il/2012/10/the-specified-path-file-name-or-both.html - roi
8个回答

33

这是Windows win32 API中一个众所周知的限制。您存储项目的目录嵌套太深了。文件的完整路径名不能超过259个字符。如果超出此限制,许多使用MAX_PATH的C代码由于缓冲区溢出而开始失败。

将您的解决方案移动到另一个目录,靠近根目录。


14
有没有办法避免 MAX_PATH 这个限制? - Sonhja
对我有用,当解决方案存储的文件夹名称过长时也会发生。谢谢! - Santiago Rebella

27

我曾遇到一个类似的问题,编译器报告 ASPNETCOMPILER 文件有问题。实际上,问题出在解决方案中包含了 node_modules 文件夹,而该文件夹中可能包含非常长的路径,看起来编译器无法处理。

Windows 8.1 和 10 有一个选项可以增加 Win32 路径限制:

  • 打开组策略编辑器(按 Windows+R 键,然后键入 gpedit.msc 并按 Enter 键)
  • 从组策略编辑器窗口中导航到以下节点:本地计算机策略\计算机配置\管理模板\系统\文件系统
  • 双击启用 Win32 长路径选项并启用它。

这可能允许您暂时将问题文件夹移出构建文件夹,这可能使您能够成功构建,然后您可以将文件夹添加回解决方案中,而不会影响任何内容。

请参阅此处以获得额外的参考 - https://www.microfocus.com/documentation/filr/filr-4/filr-desktop/t47bx2ogpfz7.html


我的Windows 10 Home版本中的System文件夹下没有FileSystem文件夹? - IrishChieftain
1
是的,它不是文件路径。按照我在第一条提示中所描述的打开组策略编辑器,它将提供一个文件夹结构,您可以浏览该结构(它与Windows文件夹结构不匹配)。我会更改我的回答以使其清晰明了。 - Chris Halcrow
这应该是在Windows 10和Server 16+上被接受的解决方案。 - Rouse02
1
gpedit仅适用于Windows 10专业版和企业版。此外,似乎即使在Windows中启用了长路径,Visual Studio 2019的任何版本(社区版、专业版、企业版)都不支持长路径... - Pieterjan
1
您可以添加此链接以供参考:https://www.microfocus.com/documentation/filr/filr-4/filr-desktop/t47bx2ogpfz7.html - Hamed Lohi

20

可以使用注册表方法来至少在Windows 10上实现:
参数的值HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled(Type:REG_DWORD)应设置为1. 输入图片描述 您甚至不需要重新启动任何东西(IDE或PC)。


3
这对我没有用。我使用组策略编辑器启用了长路径,并验证了注册表键设置为1,但 Visual Studio 2017 仍然抱怨我的路径太长 :-( - Dave.Haku
@Dave.Haku,你尝试过重新启动了吗?如果是这样,我已经没有更多的想法了。 - SerjG
组策略会强制执行任何注册表更改。因此,如果用户的策略已禁用它,无论您是否重新启动计算机,都不会起作用,因为 GPO 策略会在启动时强制执行。 - RashadRivera

9
这个问题是由于Windows操作系统对超过260个字符的长路径的限制而引起的。对于VS2019用户,解决这个问题相当简单。但是,对于VS2017用户,我们可以使用一个变通方法来解决该问题。 VS 2019
  • 打开“运行”窗口(windows键+r),然后键入“regedit”并按回车键。
  • 在注册表编辑器的地址栏中输入以下内容:HKLM\SYSTEM\CurrentControlSet\Control\FileSystem
  • 在右侧找到“LongPathsEnabled”键,双击它,将值从“0”更改为“1”
  • 重新启动VS2019,清理(如果需要)并重新构建您的项目。错误应该已经被修复了。
一般变通方法(VS2017/VS2019) 我们可以将原始更长的路径创建一个短路径的链接。然后,VS将把更短的路径视为项目根目录,问题就解决了。
  • 为项目创建一个较短的根路径,例如:我们已经创建了 "D:\project" 目录。
  • 现在打开命令提示符(cmd),并使用以下命令创建符号链接: mklink /D "D:\project\myProject" "YOUR_ACTUAL_LONG_PATH_PROJECT_ROOT_DIRECTORY"[如果上述命令无法执行,您可能需要以管理员身份打开cmd]
  • 现在从“D:\project\myProject”目录打开VS项目,应该就可以解决问题了。

3

不用担心...这个错误是由于路径名太长引起的,假设您的项目文件夹名称为"myproject"。

只需更改项目文件夹的位置...将您的项目"myproject"放到D:\myproject或F:\myproject驱动器中。然后再次发布即可...它会正常工作...

编码愉快...


这不会破坏任何相对引用吗? - JacobIRR

1
我遇到了同样的问题。我的结账路径比在CI服务器上使用的路径要短。它在CI服务器和我所有同事的机器上都可以成功构建,因为我们公司的用户名长度是固定的,所以我们的路径长度相同。由于路径过长,只有我一个人的机器无法构建解决方案。
如果您进入这些文件夹:

C:\Windows\Microsoft.NET\Framework

C:\Windows\Microsoft.NET\Framework64

C:\Users\[用户名]\AppData\Local\Temp

找到您正在使用的解决方案的.NET版本,然后删除您认为会影响构建的任何版本的“Temporary ASP.NET Files”文件夹。

您可以将它们全部删除,但是您下一次构建Web项目可能需要更长的时间,因为没有预编译的程序集...

对于包含ASP.NET项目的解决方案,此解决方案对我有效-它不适用于其他人在答案中提到的WPF项目,除非他们的解决方案也包含ASP.NET项目。

如果这些失败-您可以尝试通过执行以下操作递归搜索路径大于260的文件/文件夹来搜索您的解决方案根目录:

  • 打开PowerShell

  • cd <解决方案根目录路径>

  • cmd /c dir /s /b |? {$_.length -gt 260} > output.txt

这将会将路径长度超过260的文件列表导入到output.txt文件中,该文件将会在你解决方案的根目录下新建。

这将有助于你查找解决方案中路径过长的文件。


1
这是与构建定义工作区 "Build Agent Folder location" 相关的问题。 Visual Studio 添加路径示例: $(SourceDir)E:\Somedirectory\ProjectName\ 只需在字段中保留 $(SourceDir) 即可。

1

为此,您需要以管理员身份在Windows上运行Power Shell,然后键入:

New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
-Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force

这解决了这个问题。


用户必须意识到GPO执行的影响。如果您的PC设置为“禁用Win32长路径”,那么您的注册表更改将在重新启动或下一次GPO执行周期时被覆盖。 - RashadRivera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接