我遇到与described here相同的错误。我正在运行TFS Build中Windows的文件名限制。这个问题的答案建议重新定义构建代理工作目录。我不确定我是否应该这样做。我有几个问题......
更改构建代理工作目录会影响我,还是每个人都使用构建代理?
构建代理程序不是由我运行的,它位于由我们公司的其他部门控制的另一台计算机上。我可以进入“管理构建控制器”设置,我似乎能够做出这些改变,我只是害怕!
答案 0 :(得分:5)
这里有几个选项,更改构建代理上的构建目录,在团队资源管理器中右键单击“构建”文件夹并选择管理构建代理。选择您的构建服务器并将构建文件夹更改为“e:\ b”(或者甚至是“e:\”,如果这是您使用该驱动器的全部内容)这将更改该构建服务器的构建工作目录。这将从工作目录中删除几个字符。
除此之外,您还可以将构建使用的工作区尽可能地映射到树下。即使您没有用完路径上的字符,这也是一个好主意,因为TFS使用工作区来确定为您的构建获取哪些代码。
e.g。如果您的工作区映射到$ / TeamProject = $(SourceDir),这意味着TFS将获取团队项目中的所有代码以进行构建。即使您只需要1个分支的1个解决方案
考虑像这样设置的团队项目
`$/TeamProject/DevBranch/Docs /Source/Solutions/Solution1 /Solution2 /etc... /More Stuff /MainBranch/[Same As Dev] /HotFixBranch/[Same As Dev] /ReleaseBranch/[Same As Dev]`
如果您的工作区映射到$ / TeamProject,那么当您真正想要的是来自dev分支的“solution2”文件夹中的代码时,您将从TFS获取所有内容。将映射更改为$/TeamProject/Devbranch/Source/Solutions/Solution2
,您只需削减路径长度的大约60个字符。除此之外,您还可以加速构建,因为它只能获得所需的代码。
答案 1 :(得分:4)
每个使用该构建代理的构建任务都使用它,是的,它可能会影响多个人。如果您遇到路径限制,则应该更改工作目录。在你继续之前我会和部门里的其他人一起清除它,只是为了确保每个人都知道将要做什么。
答案 2 :(得分:2)
完整限定名称不得超过Windows 260个字符的MAX_PATH。实际上,各种工具使用不同的值。
超过256个字符的GAC e.g. does reject个文件名。使用文件名表示路径和文件名本身。 TFS基于Windows构建,因此TFS构建存在相同的限制。唯一可行的解决方案是使用尽可能短的工作空间目录来限制您将遇到的问题数量。您可以尝试替换工作空间目录,使其更短,但基本的文件系统限制不会消失。
是的,微软应该解决这个问题,但实际上很快就不可能。在构建期间使用的任何工具(MS和非MS)都将遇到相同的限制。当文件名太长时,工具最多会崩溃。在最糟糕的情况下,你会得到腐败的二进制文件而不会注意到。用C / C ++编写的所有应用程序用于文件名缓冲MAX_PATH + 1大小的缓冲区。即使Windows允许这样的文件名(有方法但......),几乎所有应用程序的缓冲区都太小而无法使用它们。
你并不孤单我们都受苦。从好的方面来说,这种限制确实可以防止挑剔架构师使用目标名称强制执行超过MAX_PATH的命名约定。