35

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

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

有人可以帮助我吗?我已经验证了所有字段及其扩展路径都可以。这可能是 TortoiseSVN 或类似的问题吗?我最近在我的解决方案中添加了一个文件夹,可以用这个吗?

4

7 回答 7

32

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

将您的解决方案移至另一个目录,即更接近根目录的目录。

于 2012-07-11T14:05:13.717 回答
23

我有一个类似的问题,编译器报告说文件 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

于 2017-03-30T00:00:25.270 回答
14

There is registry approach which can be used at least for Windows 10:
Value of the parameter HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD) should be set to 1. enter image description here You don't even need top restart anything (IDE or PC).

于 2020-08-25T18:25:15.927 回答
3

不用担心......这个错误是因为路径名太长,假设您的项目文件夹名称是“myproject”。

您只需更改项目文件夹的位置...将您的项目“myproject”放入 D:\myproject 或 F:\myproject 驱动器。然后您再次发布..它的工作...

快乐的编码...

于 2014-07-23T12:10:44.743 回答
3

这个问题是由于 Windows 操作系统对处理长度大于 260 的长路径的限制造成的。VS2019 的这个问题的解决方案非常简单。但是,对于 VS2017 用户,我们可以使用变通方法来解决问题。

VS 2019

  • 打开run窗口(windows-key + r),然后输入regedit并回车。
  • 在注册表编辑器的地址栏上,输入:HKLM\SYSTEM\CurrentControlSet\Control\FileSystem
  • 在右侧,找到 key LongPathsEnabled,双击它,然后将值从 更改01
  • 重新启动 VS2019,清理(如果需要)并再次构建您的项目。错误应该被修复。

一般解决方法(VS2017/VS2019)

我们可以创建一个原始较长路径到较短路径的链接。然后,VS会将较短的路径视为项目根,问题将得到解决。

  • 为项目创建一个较短的根路径,例如我们创建了"D:\project"目录
  • 现在打开 cmd(命令提示符)并使用以下命令创建符号链接:mklink /D "D:\project\myProject" "YOUR_ACTUAL_LONG_PATH_PROJECT_ROOT_DIRECTORY" [如果上述命令执行失败,您可能需要以管理员身份打开 cmd]
  • 现在,从"D:\project\myProject"目录中打开 VS 项目,它应该可以工作了。
于 2021-08-05T07:32:58.217 回答
1

这是构建定义工作区“构建代理文件夹位置”VS添加路径示例的问题:$(SourceDir)E:\Somedirectory\ProjectName\ 只需将 $(SourceDir) 保留在字段中

于 2015-03-10T12:38:11.770 回答
1

我有同样的问题。我的结帐路径比我的 CI 服务器上使用的路径短。它在 CI 服务器和我所有同事的机器上都可以构建。我们的路径长度相同,因为我们公司有固定长度的用户名。由于路径长,我是唯一无法构建解决方案的机器。

如果您转到这些文件夹:

C:\Windows\Microsoft.NET\Framework

C:\Windows\Microsoft.NET\Framework64

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

找到您在解决方案中使用的 .NET 版本,然后从您认为影响构建的版本中删除“临时 ASP.NET 文件”文件夹。

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

该解决方案在包含 ASP.NET 项目的解决方案上为我工作 - 它不适用于其他人在他们的答案中提到的 WPF 项目,除非他们的解决方案还包含 ASP.NET 项目。

搜索错误字符串 VS 将您带到这里,所以我认为它可能会帮助其他人,如果不是带有 WPF 构建问题的 Op。

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

  • 打开 Powershell

  • 光盘<path to solution root>

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

这会将路径 > 260 的文件列表通过管道传输到 output.txt 文件,该文件将在您的解决方案的根目录中新创建。

这将帮助您在解决方案中找到过长的文件。

于 2016-11-01T12:13:27.697 回答