我在构建 WPF 解决方案时遇到了麻烦。每次我尝试构建它时,都会收到以下错误消息:
未知的构建错误,'指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。
有人可以帮助我吗?我已经验证了所有字段及其扩展路径都可以。这可能是 TortoiseSVN 或类似的问题吗?我最近在我的解决方案中添加了一个文件夹,可以用这个吗?
我在构建 WPF 解决方案时遇到了麻烦。每次我尝试构建它时,都会收到以下错误消息:
未知的构建错误,'指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。
有人可以帮助我吗?我已经验证了所有字段及其扩展路径都可以。这可能是 TortoiseSVN 或类似的问题吗?我最近在我的解决方案中添加了一个文件夹,可以用这个吗?
这是 Windows win32 api 中众所周知的限制。您存储项目的目录嵌套太深。文件的完整路径名不能超过 259 个字符。除此之外,由于缓冲区溢出,许多使用 MAX_PATH 的 C 代码开始失败。
将您的解决方案移至另一个目录,即更接近根目录的目录。
我有一个类似的问题,编译器报告说文件 ASPNETCOMPILER 有问题。实际问题是该解决方案包含一个 node_modules 文件夹,而该文件夹可能包含非常长的路径,并且看起来编译器无法处理这个问题。
Windows 8.1 和 10 可以选择增加 Win32 路径限制:
这可能允许您暂时将问题文件夹移出构建,这可能允许您成功构建,然后您可以将文件夹重新添加到解决方案中而不会影响任何内容。
有关其他参考,请参见此处 - https://www.microfocus.com/documentation/filr/filr-4/filr-desktop/t47bx2ogpfz7.html
不用担心......这个错误是因为路径名太长,假设您的项目文件夹名称是“myproject”。
您只需更改项目文件夹的位置...将您的项目“myproject”放入 D:\myproject 或 F:\myproject 驱动器。然后您再次发布..它的工作...
快乐的编码...
这个问题是由于 Windows 操作系统对处理长度大于 260 的长路径的限制造成的。VS2019 的这个问题的解决方案非常简单。但是,对于 VS2017 用户,我们可以使用变通方法来解决问题。
VS 2019
run
窗口(windows-key + r),然后输入regedit
并回车。HKLM\SYSTEM\CurrentControlSet\Control\FileSystem
LongPathsEnabled
,双击它,然后将值从 更改0
为1
一般解决方法(VS2017/VS2019)
我们可以创建一个原始较长路径到较短路径的链接。然后,VS会将较短的路径视为项目根,问题将得到解决。
"D:\project"
目录mklink /D "D:\project\myProject" "YOUR_ACTUAL_LONG_PATH_PROJECT_ROOT_DIRECTORY"
[如果上述命令执行失败,您可能需要以管理员身份打开 cmd]"D:\project\myProject"
目录中打开 VS 项目,它应该可以工作了。这是构建定义工作区“构建代理文件夹位置”VS添加路径示例的问题:$(SourceDir)E:\Somedirectory\ProjectName\ 只需将 $(SourceDir) 保留在字段中
我有同样的问题。我的结帐路径比我的 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 文件,该文件将在您的解决方案的根目录中新创建。
这将帮助您在解决方案中找到过长的文件。