Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TFS正在更改生成代理工作目录_C#_.net_Tfs_Tfsbuild - Fatal编程技术网

C# TFS正在更改生成代理工作目录

C# TFS正在更改生成代理工作目录,c#,.net,tfs,tfsbuild,C#,.net,Tfs,Tfsbuild,我犯了和你一样的错误。我在TFS构建中遇到了windows的文件名限制。这个问题的答案建议重新定义构建代理工作目录。我不确定我是否应该这样做。我有几个问题 更改生成代理工作目录是否会影响我,或者影响使用生成代理的所有人 构建代理不是由我运行的,它在我们公司不同部门控制的另一台计算机上。我可以进入“管理构建控制器”设置,而且我似乎能够进行这些更改,我只是害怕 每个使用该构建代理的构建任务都会使用它,所以是的,它可能会影响多个人。如果您遇到路径限制,您肯定应该更改工作目录。在你继续之前,我只想和部门

我犯了和你一样的错误。我在TFS构建中遇到了windows的文件名限制。这个问题的答案建议重新定义构建代理工作目录。我不确定我是否应该这样做。我有几个问题

  • 更改生成代理工作目录是否会影响我,或者影响使用生成代理的所有人

  • 构建代理不是由我运行的,它在我们公司不同部门控制的另一台计算机上。我可以进入“管理构建控制器”设置,而且我似乎能够进行这些更改,我只是害怕


  • 每个使用该构建代理的构建任务都会使用它,所以是的,它可能会影响多个人。如果您遇到路径限制,您肯定应该更改工作目录。在你继续之前,我只想和部门里的其他人澄清一下,以确保每个人都知道要做什么。

    完整的限定名不得超过MAX_PATH,即260个字符。实际上,不同的工具使用不同的值

    超过256个字符的文件名。使用文件名表示路径和文件名本身。 TFS构建在Windows上,因此TFS构建也存在相同的限制。唯一可行的解决方案是使用一个尽可能短的工作区目录,以限制您将遇到的问题的数量。您可以尝试将工作区目录替换为更短的目录,但基本的文件系统限制不会消失

    是的,微软应该解决这个问题,但事实上,这是不可行的很快。构建过程中使用的任何工具(MS和非MS)都会遇到相同的限制。当文件名太长时,这些工具最多只能崩溃。在最坏的情况下,您会在不知不觉中收到损坏的二进制文件。所有用C/C++编写的应用程序都使用一个最大路径+1大小的缓冲区作为文件名缓冲区。即使Windows允许这样的文件名(也有办法,但…),几乎所有应用程序的缓冲区都太小,无法使用它们


    你并不孤单,我们都在受苦。从好的方面来看,这种限制确实阻止了挑剔的架构师强制执行命名约定,这些约定仅与目标名称一起超过了MAX_PATH

    这里有两个选项,更改构建代理上的构建目录,在团队资源管理器中右键单击“构建”文件夹并选择管理构建代理。选择生成服务器并将生成文件夹更改为类似“e:\b”(或者甚至是“e:\”,如果您仅使用该驱动器),这将更改该生成服务器的生成工作目录。这将从工作目录中删除几个字符

    除此之外,您还可以将构建所使用的工作区映射到树的最下方。这是一个好主意,即使在TFS使用工作区确定要为构建获取哪些代码时,路径上的字符还没有用完

    e、 g.如果您的工作区映射到$/TeamProject=$(SourceDir),这意味着TFS将获得团队项目中用于构建的所有代码。即使您只希望从一个分支获得一个解决方案

    考虑这样设置的团队项目

    `$/TeamProject/DevBranch/Docs /Source/Solutions/Solution1 /Solution2 /etc... /More Stuff /MainBranch/[Same As Dev] /HotFixBranch/[Same As Dev] /ReleaseBranch/[Same As Dev]` `$/TeamProject/DevBranch/Docs /来源/解决方案/解决方案1 /解决方案2 /等等。。。 /更多的东西 /MainBranch/[与开发人员相同] /HotFixBranch/[与开发人员相同] /ReleaseBranch/[与开发人员相同]`
    如果您的工作区映射到$/TeamProject,那么您将从TFS获得所有信息,而您真正需要的只是开发分支的“solution2”文件夹中的代码。将映射更改为
    $/TeamProject/Devbranch/Source/Solutions/Solution2
    ,您刚刚将路径长度减少了约60个字符。除此之外,您还可以加快构建速度,因为它只会获得所需的代码。

    请记住,获得宽恕比获得许可更容易。通过更改工作目录,是否可以解决此问题?我的意思是,我们的TFS服务器中有100个项目,我很难相信这是这个问题第一次出现。。。似乎没有人有这个问题,只有我。为什么不创建一个使用不同路径的新构建代理,然后将您的构建分配给这个呢?我唯一能想到的另一个选择是在TFS中重新定义项目的文件夹结构,使其路径名更短。否则,我认为您将不得不更改工作目录。+1:到目前为止,最简单的解决方案是确保build servers本地工作区针对的是一个短目录,而不是典型的c:\documents。。。垃圾。+1非常好的建议。不幸的是,我们的公司政策“反映”了TFS中的内容。愚蠢,是的,但我现在对此无能为力。不过,我会把这个建议传给管理层。啊,愚蠢的公司政策,我感觉到了你的痛苦。我会首先抱怨构建需要花费太长时间才能完成,而您的开发人员正在浪费时间坐在那里等待构建。当然,谁会知道构建服务器上的结构是什么?