2012-02-09 88 views
19

我們有一個ASP.NET MVC項目,我們希望在自動構建期間創建發佈包。構建使用未修改的默認模板和參數/p:DeployOnBuild=True /p:CreatePackageOnPublish=TrueTFS 2010 - 複製期間發生錯誤:路徑太長

如果我直接對服務器執行WebDeploy,它工作正常(如果將/ p:CreatePackageOnPublish更改爲false),但我更願意創建一個可在Lab生成期間部署的包。

錯誤信息是這樣的:

TF270002:出現了一個錯誤,複製文件 'C:\構建\ 19個\二進制' 到「\ NAS \建立\刪除\ MyProject的\ MyProject_Development.Test \ 20120209.1' 。 細節:指定的路徑,文件名或這兩者太長。 完全限定的文件名必須少於260個字符,並且 目錄名稱必須少於248個字符。

問題的第一部分是build文件夾路徑太長(274個字),但是從$(SystemDrive)\Builds\$(BuildAgentId)\$(BuildDefinitionPath)改變工作目錄$(SystemDrive)\Builds\$(BuildDefinitionId)後它下降到230個字符的路徑最長,所以應該沒問題。

現在問題似乎是放置文件夾中的路徑,儘管它的根路徑本身並不是那麼長\\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)以節省幾個字符,但這還不夠。我想我們可以稍微縮短構建名稱,但它會破壞所使用的命名約定(好吧,這不會是一個很大的問題,但它會很煩人!),它仍然會像短期解決方案。

還有什麼可做的?

回答

13

簡短的答案是路徑長度限制真的很煩人,你將不得不花費一些(更多)時間調整文件/文件夾結構來完成這項工作。

例如,如果不是\ nas \ Build \ Drop \ MyProject,只需執行\ nas \ Build \ Drop(或\ nas \ Builds),因爲項目名稱也在構建名稱中。

展平項目中的文件夾結構(你真的需要MyProject下的Source文件夾嗎?)。

此外,去投給UserVoice的建議爲TFS團隊來解決路徑長度限制:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2156195-fix-260-character-file-name-length-limitation

+0

我害怕,有沒有更好的解決這個...我已經削減儘可能的多餘的(我的構建現在稱爲M_D.T,非常有用),現在它的構建雖然我最長的路徑是250個字符,所以它有點接近極限的舒適度。感謝您的回答以及UserVoice的鏈接! – 2012-02-10 08:19:03

+1

更新:修復此問題的功能建議被Microsoft拒絕。 – 2013-10-17 12:33:29

+2

新的用戶語音鏈接,保持壓力;) http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4954037-fix-260-character-file-name-length-limitation – rob 2013-11-18 16:38:31