我们有一个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)
以保存一些字符,但这还不够。我想我们可以稍微缩短构建名称,但它会打破使用的命名约定(好吧,这不会是一个非常大的问题,但它会很烦人!)而且它仍然会感觉像是一个短期解决方案。
还有什么可做的?
答案 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构建的一部分来运行。它强制所有添加或修改的文件都没有比您允许的路径长的路径。
中有描述