Team Build and 260+ Character Paths
A fairly common issue in Team Build v1 involved builds failing due to paths that exceed 260 characters - see this forum post, for example. 260 characters is not a Team Build limit - it is a Windows limit. See here for a reference on this topic...
Team Build builds do tend to run into the 260 character limit more often than non-Team Build builds, however, because Team Build builds occur within a working directory on your build machine which already contains a bunch of characters.
In Team Build v1, you could specify a specific working directory for each build type (and even override this when starting a build). Let's say that you use the directory "C:\BuildLocation" for a given build type. To ensure that individual build types avoid the workspace conflicts that would occur if they tried to use the same working directory, Team Build v1 then appends the team project name and the build type name to this working directory. So - if your team project was called "Framework Projects" and your build type was called "Nightly Build", the build type working directory would end up being "C:\BuildLocation\Framework Projects\Nightly Build".
But wait - there's more! Your source files will then be placed in a subdirectory called "Sources" (while binaries will end up in "Binaries" and test results in "TestResults"). So - the full working directory in which your build will take place in this case would be "C:\BuildLocation\Framework Projects\Nightly Build\Sources" - that's 57 characters right off the bat, leaving you only 203 remaining before you hit the Windows limit...
We've tried to give you more control over this issue in Orcas by making two changes. In Orcas, a working directory is associated with a Build Agent (more-or-less a build machine) rather than a Build Definition (formerly known as a build type). Whatever you specify for this directory will be the entire path used for the base working directory - Team Build will not append the team project or definition name to the end. To ensure that individual build definitions can still avoid the workspace conflicts that would occur if they tried to use the same working directory, Team Build Orcas provides two variables that can be used in these working directories - $(BuildDefinitionPath) and $(BuildDefinitionId).
$(BuildDefinitionPath) expands to "<team project name>\<definition name", or essentially the same thing that was used in v1. So - if you don't normally run into the path length issue, you can just keep using the same sorts of paths that were used in v1. $(BuildDefinitionId), on the other hand, expands to the string representation of the integer identifier of the build definition in the Team Build database. This will typically be much shorter than $(BuildDefinitionPath). (FYI - you can also use environment variables with the same syntax. For example, you could do something like $(HOMEDRIVE)\$(BuildDefinitionPath) to get something like C:\TeamProject\Definition)
Additionally, we've given you control over the three subdirectories used by Team Build - you can modify the keys "SourcesSubdirectory", "BinariesSubdirectory", and "TestResultsSubdirectory" in the configuration file for the service that executes builds on your build machines. (Typically this will be something like %ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\TfsBuildService.exe.config)
So - if you have really long paths and need Team Build Orcas to get out of your way, here's how to get really short working directories:
- If you can dedicate a build agent to a single build definition, you can use something like "C:\b" for your working directory. If you then use "s" for your SourceSubdirectory, your full working directory for the build would be "C:\b\s" - a savings of 51 characters.
- If you need to use a build agent for multiple build definitions, you can still use something like "C:\b\$(BuildDefinitionId)" for your working directory. If you have fewer than 1000 build definitions, your full working directory would be something like "C:\b\123\s" - still a savings of 47 characters.
-Aaron
Comments
- Anonymous
June 20, 2007
The comment has been removed - Anonymous
June 20, 2007
Nope - there's no way I know of to get that to work here. Build involves too many individual tools (Team Build, MSBuild, csc.exe, vcbuild.exe, aspnet_compiler.exe, etc.) that all pay attention to the 260 character limit - at some point, something is guaranteed to "barf" (that's a technical term) on the path and fail the build.The important bit in the quote you mentioned is the word "several". Many versions of functions do not permit a maximum path greater than 260, including the .NET APIs, which are used extensively by Team Build, MSBuild, etc. See http://blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx for more information here. - Anonymous
July 20, 2007
Buried in the tfsbuildservice.exe.config file are a number of options that control key aspects of the - Anonymous
December 13, 2007
I am working on an automatic build for one of my customers. When I initiate the Get task that gets all - Anonymous
February 23, 2008
The comment has been removed - Anonymous
February 26, 2008
Maximum file path length in TFS Team Build - Anonymous
February 27, 2008
I've seen numerous people saying the limitation is less than 260 characters with the limit varying from person to person. I think I know why:-I've run into this problem in my build. I was getting CS0006 on assemblies referenced by a couple of projects, when several other projects were compiliing successfully referencing the same assembly. The absolute paths of both the project and a (file typed) referenced assembly were a lot less than 260 characters i.e the referenced assembly absolute path was about 140 and the projects path was 160.However when you took the relative path of the referenced assembly from a project directory.................LibCompact FrameworkWindows Dynamic Mobile FrameworkMicrosoft.Dynamics.Mobile.Framework.Controls.dlland concatenated that on to the absolute path of the project directory referencing the file, if the end result was greater than 260 characters then that project would fail to build with a CS0006 error.This means the limitation is about twice as constricting as what you've described here. It would be OK if the limit was just the absolute path to assemblies. However when this limit is applied to the combined length of the project and the relative path to a referenced assembly then this limitation is quite constricting.I think you guys really need to look at this and fix it. - Anonymous
March 26, 2008
Lettere al Genio del Male: Team Build e il problema dei 260 caratteri... - Anonymous
June 16, 2008
This post applies to mostly to Team Build 2005 but users of later versions of TFS may find this useful - Anonymous
July 08, 2008
If you are creating multiple build types, i.e. daily, weekly, continuous and others for a Team Project - Anonymous
July 08, 2008
One of our development teams experienced a 'Workspace already mapped' problem when trying to - Anonymous
August 03, 2008
Maximum file path length - Windows and TFS - Anonymous
May 16, 2009
Maximum file path length - Windows and TFS - Part 2 - error CS0006: Metadata file could not be found - Anonymous
May 22, 2009
I’m a big fan of Team Build, it keeps the project rhythm going and without it there is no real way of - Anonymous
November 30, 2010
Khushi itni ho ki tum dikha sako,Gum bas itna ho ki tum chupa sako,Zindagi main kam se kam ek rishta toa aaisa jaroor rakhna,Jiske liye tum mood off main bhi muskura sako - Anonymous
July 14, 2011
Thanks for this tip, it helped me out a lot. However, I just discovered today that C:b$(BuildDefinitionId) will only work as long as a single agent on the machine is used to run the build. If the machine has multiple agents, it will fail sooner or later. The solution is to add $(BuildAgentId) back in, or give each build agent a unique path for the working directory. A deeper solution would change the logic in the template that initializes the workspace name so that both agents use the same workspace. - Anonymous
April 16, 2014
Have anyone used Long Path Tool as this Tool is very useful if you are having problems in deleting, unlocking, copying and even renaming files that are considered filename too long by your system. Yes, these problems can occur even while using the latest Windows Explorer or FAR in managing your files. - Anonymous
June 17, 2014
I agree with ethany. Long Path tool is truly a very versatile tool. Its sure to sort out this type of a problem. - Anonymous
July 14, 2014
Hello,I suggest you to download new Long Path Tool software that simply allows you to work easily on Long Path files.Thank you. - Anonymous
November 18, 2014
Hello,you simply need to copy your project folder from your path to root directory (ex:-d:abcabcxyzYourProject to d:YourProject )Maximum file path length Error Solved.this trick work in my case.thank you - Anonymous
January 07, 2015
visualstudio.uservoice.com/.../2156195-fix-260-character-file-name-length-limitation - Anonymous
February 11, 2015
Long Path Tool helped me in this situation - Anonymous
March 02, 2015
The comment has been removed