Temp path too long when publishing a web site project
Asked Answered
T

9

38

I am trying to publish an ASP.NET web site project using the Publish Web Site tool but get this error:

ASPNETCOMPILER(0,0): Error ASPRUNTIME: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.

I see that it is trying to copy the files to a very long path in AppData:

Copying all files to temporary location below for package/publish:

C:\Users\imx0\AppData\Local\Temp\1\WebSitePublish\BMW.Web-424993535\obj\Debug\AspnetCompileMerge\Source.

c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v /BMW.Web -p C:\Users\imx0\AppData\Local\Temp\1\WebSitePublish\BMW.Web-424993535\obj\Debug\AspnetCompileMerge\Source C:\Users\imx0\AppData\Local\Temp\1\WebSitePublish\BMW.Web-424993535\obj\Debug\AspnetCompileMerge\TempBuildDir

I couldn't find anything about this temp directory in my .pubxml publish profile. How can I change the temporary directory that Visual Studio copies the files to?

Toluate answered 13/5, 2013 at 15:41 Comment(0)
T
57

Add this to your publish profile to modify the temporary directory for package/publish:

<AspnetCompileMergeIntermediateOutputPath>c:\shortPath\</AspnetCompileMergeIntermediateOutputPath>
Toluate answered 13/5, 2013 at 18:32 Comment(7)
Where did you find this out? I tried to implement this fix, but I'm not having much luck: #19411636Furnace
@ChrisHardie I found it digging around in the MSBuild installation. For me this was C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.5\Web\Transform. I also get the error about WebPublishMethod being invalid but it works anyway.Toluate
Where is the "publish profile"? I don't see this in my csproj file at all.Boisvert
@StealthRabbi I was working with a web site which doesn't have a csproj file so it put the publish profile in App_Data. However, I looked at a csproj file for an MVC app and it looks like you might be able to copy that tag into the <PropertyGroup> for each build config.Toluate
How on Earth did you discover that?!Glyph
This is change only temp copy path, but copied to path remain same in my project. What will I do?Circumfluous
10 years later and still handy. For me, on VS 2022, this file is located in my project: App_Data\PublishProfiles\local.pubxml.Sicken
I
19
  1. Go to your web project folder, navigate to Properties\PublishProfiles folder.
  2. open your profile file profile_name.pubxml (not the profile_name.pubxml.user)
  3. copy/past <AspnetCompileMergeIntermediateOutputPath>c:\shortPath\</AspnetCompileMergeIntermediateOutputPath> under the <PropertyGroup> tag
  4. save your file, you would be able to publish your website using this profil
Indophenol answered 6/5, 2014 at 6:4 Comment(0)
C
12

This is sort of an aside answer, but I ran into this problem when trying to MSBuild a solution that depended on nodeJS and gulp. The problem was that the gulp dependency tree became very deep and the aspnet_compiler was trying to copy that tree to a deeper directory, resulting in this error. I tried everything noted in here but nothing worked.

As it so happened, I was building with TFS, so my solution was to run an attrib +h node_modules\* /S /D before msbuild to hide the directory tree and then attrib +h node_modules\* /S /D. That did it for me.

Sure would be nice if the error thrown in this situation by the compiler revealed the path that caused the write to fail...

Caste answered 14/1, 2016 at 17:4 Comment(3)
I too followed this, but decided it was sufficient to just do the node directory. So, doing this attrib +h node_modules before and attrib -h node_modules after.Nudnik
Wow, this solved it for me! I was trying to compile my views and got the error. This is what I added in my .csproj file: <Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'"> <Exec Command="attrib node_modules +h"/> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> <Exec Command="attrib node_modules -h"/> </Target>Altamira
Beautiful solution. Thank youAfield
R
9

try adding this

<IntermediateOutputPath>..\Temp</IntermediateOutputPath>

to the default <propertyGroup />

Ricky answered 19/11, 2014 at 6:54 Comment(2)
I was stuck for quite long as my solution used to publish and all of a sudden it started throwing me length error. This solution worked for me, just I had to append an extra backslash after '.. \Temp\' as it threw error and stated to do so on publish.Aranda
This worked for me; but @kennydust, it's worth saying that this change needs to be done in the project file (as covered in #19411636) rather than being in the publish profile file (which looks very similar, and also has a PropertyGroup).Cobaltic
M
6

None of the other answers worked for me.

Visual Studio 2013 Community Edition.

I changed the TMP and TEMP environment variable to a short folder name and it worked.

Movie answered 30/4, 2015 at 19:59 Comment(2)
Yeah. I think this is the best solution. And dont forget reset your computer after doing that.Scintillation
Used this solution for another problem, but also worked great. I've created a "symbol link" to original temp folder and used it in env variablesGrig
P
2

We identified the lengthy files/folders using this solution, then corrected the issue from there:

  1. Run this script at the command prompt: dir /s /b | sort /r /+261 > out.txt it will output all file paths into the out.txt file
  2. Copy the output to an Excel file
  3. In the next column over from what you pasted in add this Excel function: =LEN(A1) where "A1" is the cell, copy this against every file length so you can see how long the paths are
  4. Sort in Excel by the path length
  5. Identify the lengths over the recommended limit

I know this is a bit long-winded but if you have several files that are resulting in this issue you'll be able to see them all.

Pangaro answered 14/7, 2017 at 9:5 Comment(1)
This treats the symptom rather than the cause, so if long files are added in future, this issue will occur again. In our case, the long file names were coming from a "Connected Services" folder (thanks for the long folder name Microsoft), so there is only so much we can change about the file names within there. This answer worked for me: https://mcmap.net/q/392965/-temp-path-too-long-when-publishing-a-web-site-projectCobaltic
P
1

Even though the content of node_modules was not included in neither version control not in the *.csprojfile itself Deleting the whole node_modules folder did the trick for me.

Proliferation answered 12/3, 2018 at 12:20 Comment(0)
Z
0

You can try the selected solution for correcting the long file path issue.

Still if not able to publish due to some other issue, You can try below method.

=> If the 'Solution Configuration' is in 'Debug' mode, please change the same to 'Release' mode and Publish the files.

=> If the Solution Configuration is in Release mode, and if the problem still persists, please try to delete the dll generated earlier in the 'Release' folder of our project and Publish the project once again.

Any of the above method will solve the issue.

Zephan answered 21/4, 2018 at 10:27 Comment(0)
R
0

For me, using Visual Studio 2019, the only change to the publish profile .pubxml file that worked was:

<WPPAllFilesInSingleFolder>c:\shortPath\</WPPAllFilesInSingleFolder>

I discovered this property at line 484 of Microsoft.Web.Publishing.targets file. Full path was C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\Web.

Rematch answered 5/3, 2020 at 7:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.