TFS 2010 - 复制期间发生错误:路径太长

时间:2012-02-09 13:00:06

标签: tfs tfs2010 tfsbuild

我们有一个ASP.NET MVC项目,我们想在自动构建期间创建一个发布包。构建使用带有参数/p:DeployOnBuild=True /p:CreatePackageOnPublish=True的未修改的默认模板。

如果我直接将WebDeploy安装到服务器上,它运行正常(如果我将/p:CreatePackageOnPublish更改为false),但我更愿意创建一个可以在实验室构建期间部署的软件包。

错误消息如下所示:

  

TF270002:从'C:\ Builds \ 19 \ Binaries'复制文件时出错   到'\ nas \ Build \ Drop \ MyProject \ MyProject_Development.Test \ 20120209.1'。   详细信息:指定的路径,文件名或两者都太长。该   完全限定的文件名必须少于260个字符,并且   目录名称必须少于248个字符。

问题的第一部分是构建文件夹路径太长(274个字符)但是在将工作目录从$(SystemDrive)\Builds\$(BuildAgentId)\$(BuildDefinitionPath)更改为$(SystemDrive)\Builds\$(BuildDefinitionId)之后,最低路径为230个字符,因此它应该可以。

问题现在似乎是drop文件夹中的路径,即使它的根路径本身不长\\nas\Build\Drop\MyProject,构建名称和构建数字格式也会快速添加到MyProject_Development.Test\MyProject_Development.Test_20120208.1长度。之后,所有嵌套路径都会创建非常深的文件夹结构_PublishedWebsites\MyProject.Web_Package\Archive\Content\C_C\Builds\19\Sources\MyProject\Source\MyProject.Web\obj\Debug\Package\PackageTmp\Content\ui-lightness\Images\ui-bg_diagonals-thick_18_b81900_40x40.png

那么有什么方法可以解决这个问题吗?我将内部版本号格式从$(BuildDefinitionName)_$(Date:yyyyMMdd)$(Rev:.r)缩短为$(Date:yyyyMMdd)$(Rev:.r)以保存一些字符,但这还不够。我想我们可以稍微缩短构建名称,但它会打破使用的命名约定(好吧,这不会是一个非常大的问题,但它会很烦人!)而且它仍然会感觉像是一个短期解决方案。

还有什么可做的?

2 个答案:

答案 0 :(得分:13)

简短的回答是路径长度限制真的很烦人,你将不得不花费一些(更多)时间调整你的文件/文件夹结构来使这项工作。

例如,而不是\ nas \ Build \ Drop \ MyProject,只需要执行\ nas \ Build \ Drop(或\ nas \ Builds),因为项目名称也在构建名称中。

展平项目中的文件夹结构(你真的需要MyProject下的Source文件夹吗?)。

此外,投票支持TFS团队的UserVoice建议以修复路径长度限制:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2156195-fix-260-character-file-name-length-limitation

答案 1 :(得分:0)

我知道这个问题很旧,但是我遇到了同样的问题,因此我想解决这个问题,尽管它更多地是在防止问题发生而不是解决现有的路径长度条件上。问题一经手动解决,便可以应用。

请注意,它适用于git下的TFS。可以为TFSVC设计类似的方法,尽管必须在代码合并后运行。

从本质上讲,这是一个简短的脚本,可以作为PR构建的一部分来运行。它强制所有添加或修改的文件都没有比您允许的路径长的路径。

它在this blog post

中有描述