Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Path too long" when publishing asp.net 5 from Visual Studio 2015

This seems to be a common problem and I found several Stack Overflow questions, but they all seem to pertain to MSBuild.

I'm trying to publish by right-clicking on my asp.net 5 rc1 project in Visual Studio and invoking a file system-based publish profile.

Its settings look like this:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <WebPublishMethod>FileSystem</WebPublishMethod>
        <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
        <LastUsedPlatform>Any CPU</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish />
        <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
        <ExcludeApp_Data>False</ExcludeApp_Data>
        <CompileSource>False</CompileSource>
        <_DefaultDNXVersion>dnx-clr-win-x86.1.0.0-rc1-final</_DefaultDNXVersion>
        <UsePowerShell>True</UsePowerShell>
        <IISCommand>web</IISCommand>
        <WebRoot>wwwroot</WebRoot>
        <WwwRootOut>wwwroot</WwwRootOut>
        <IncludeSymbols>False</IncludeSymbols>
        <Native>False</Native>
        <IgnoreDNXRuntime>False</IgnoreDNXRuntime>
        <publishUrl>C:\Source\CCollections\artifacts\bin\CCollections.Client.Web.Angular\Release\PublishOutput</publishUrl>
        <DeleteExistingFiles>False</DeleteExistingFiles>
    </PropertyGroup>
</Project>

This yields this output:

C:\Source\CCollections\src\CCollections.Client.Web.Angular>C:\Users\Christopher\.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc1-final\bin\dnu.cmd publish "C:\Source\CCollections\src\CCollections.Client.Web.Angular" --out "C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96" --configuration Release --runtime dnx-clr-win-x86.1.0.0-rc1-final --wwwroot "wwwroot" --wwwroot-out "wwwroot" --iis-command "web"
Microsoft .NET Development Utility Clr-x86-1.0.0-rc1-16202

Executing script 'prepublish' in project.json
npm WARN package.json [email protected] No description
npm WARN package.json [email protected] No repository field.
npm WARN package.json [email protected] No README data
npm WARN package.json [email protected] No license field.
npm WARN unmet dependency C:\Source\CCollections\src\CCollections.Client.Web.Angular\node_modules\gulp-cssmin\node_modules\gulp-util requires minimist@'^0.2.0' but will load
npm WARN unmet dependency C:\Source\CCollections\src\CCollections.Client.Web.Angular\node_modules\gulp-cssmin\node_modules\minimist,
npm WARN unmet dependency which is version 1.1.1
npm WARN unmet dependency C:\Source\CCollections\src\CCollections.Client.Web.Angular\node_modules\gulp-cssmin\node_modules\through2 requires readable-stream@'~1.0.17' but will load
npm WARN unmet dependency C:\Source\CCollections\src\CCollections.Client.Web.Angular\node_modules\gulp-cssmin\node_modules\readable-stream,
npm WARN unmet dependency which is version 1.1.13
[12:15:37] Using gulpfile C:\Source\CCollections\src\CCollections.Client.Web.Angular\gulpfile.js
[12:15:37] Starting 'clean:js'...
[12:15:37] Starting 'clean:css'...
[12:15:37] Finished 'clean:js' after 8.17 ms
[12:15:37] Finished 'clean:css' after 7.58 ms
[12:15:37] Starting 'clean'...
[12:15:37] Finished 'clean' after 6.63 μs
[12:15:38] Using gulpfile C:\Source\CCollections\src\CCollections.Client.Web.Angular\gulpfile.js
[12:15:38] Starting 'min:js'...
[12:15:38] Finished 'min:js' after 14 ms
[12:15:38] Starting 'min:css'...
[12:15:38] Finished 'min:css' after 3.02 ms
[12:15:38] Starting 'min'...
[12:15:38] Finished 'min' after 6.03 μs
[12:15:40] Using gulpfile C:\Source\CCollections\src\CCollections.Client.Web.Angular\gulpfile.js
[12:15:40] Starting 'libcopy'...
[12:15:40] Finished 'libcopy' after 19 ms
Copying to output path C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96
Using Package dependency Microsoft.AspNet.DataProtection.Abstractions 1.0.0-rc1-final
Using Package dependency Microsoft.CodeAnalysis.CSharp 1.1.0-rc1-20151109-01
Using Package dependency Microsoft.AspNet.Identity 3.0.0-rc1-final
Using Package dependency Microsoft.Extensions.Configuration.CommandLine 1.0.0-rc1-final
Using Package dependency Microsoft.Extensions.Logging.Console 1.0.0-rc1-final
Using Package dependency System.Runtime.InteropServices 4.0.0
Using Package dependency System.Diagnostics.Debug 4.0.0
Using Package dependency Microsoft.AspNet.Mvc.Razor.Host 6.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Mvc.Razor.Host\6.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Mvc.Razor.Host\6.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\System.Runtime.InteropServices\4.0.0
Using Package dependency EntityFramework.Commands 7.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\EntityFramework.Commands\7.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\EntityFramework.Commands\7.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.CodeAnalysis.CSharp\1.1.0-rc1-20151109-01
    Source C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Configuration.CommandLine\1.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.CommandLine\1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.DataProtection.Abstractions\1.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.DataProtection.Abstractions\1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\System.Diagnostics.Debug\4.0.0
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Diagnostics.Debug\4.0.0
Using Package dependency Microsoft.AspNet.Mvc.TagHelpers 6.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Mvc.TagHelpers\6.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Mvc.TagHelpers\6.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.CodeAnalysis.CSharp\1.1.0-rc1-20151109-01
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Runtime.InteropServices\4.0.0
Using Package dependency Microsoft.Extensions.Configuration.EnvironmentVariables 1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Configuration.EnvironmentVariables\1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Logging.Console\1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Identity\3.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Identity\3.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.EnvironmentVariables\1.0.0-rc1-final
Using Package dependency Microsoft.AspNet.Diagnostics 1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Diagnostics\1.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Diagnostics\1.0.0-rc1-final
Using Package dependency EntityFramework.Core 7.0.0-rc1-final
Using Package dependency Microsoft.AspNet.Mvc.ViewFeatures 6.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Mvc.ViewFeatures\6.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Mvc.ViewFeatures\6.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Logging.Console\1.0.0-rc1-final
Using Package dependency Microsoft.Dnx.Compilation.Abstractions 1.0.0-rc1-final
Using Package dependency Microsoft.Extensions.Configuration.FileExtensions 1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Configuration.FileExtensions\1.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.FileExtensions\1.0.0-rc1-final
Using Package dependency Microsoft.AspNet.Identity.EntityFramework 3.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Identity.EntityFramework\3.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\EntityFramework.Core\7.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\EntityFramework.Core\7.0.0-rc1-final
Using Package dependency System.Diagnostics.DiagnosticSource 4.0.0-beta-23516
Using Package dependency Microsoft.Extensions.Logging.Debug 1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Logging.Debug\1.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Logging.Debug\1.0.0-rc1-final

Using Package dependency Microsoft.AspNet.Diagnostics.Abstractions 1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Diagnostics.Abstractions\1.0.0-rc1-final
Using Package dependency Microsoft.AspNet.PageExecutionInstrumentation.Interfaces 1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.PageExecutionInstrumentation.Interfaces\1.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.PageExecutionInstrumentation.Interfaces\1.0.0-rc1-final
Using Package dependency Microsoft.Extensions.Configuration.FileProviderExtensions 1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.Dnx.Compilation.Abstractions\1.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Dnx.Compilation.Abstractions\1.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Identity.EntityFramework\3.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Diagnostics.Abstractions\1.0.0-rc1-final
Using Package dependency System.Text.Encoding 4.0.0
    Source C:\Users\Christopher\.dnx\packages\System.Text.Encoding\4.0.0
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Text.Encoding\4.0.0
    Source C:\Users\Christopher\.dnx\packages\System.Diagnostics.DiagnosticSource\4.0.0-beta-23516
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Diagnostics.DiagnosticSource\4.0.0-beta-23516
    Source C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Configuration.FileProviderExtensions\1.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.FileProviderExtensions\1.0.0-rc1-final
Error: 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.
Error: 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.

C:\Source\CCollections\src\CCollections.Client.Web.Angular>

I think my problem is here: C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\

I need to use a shorter path, like C:\Temp.

I've tried some of the suggestions in other stack overflow answers.

Adding <AspnetCompileMergeIntermediateOutputPath>c:\shortPath\</AspnetCompileMergeIntermediateOutputPath> to the profile doesn't appear to help.

Adding <IntermediateOutputPath>..\Temp</IntermediateOutputPath> doesn't seem to work either.

I'm guessing it's because these settings get picked up by MSBuild, but not dnu publish.

So how to I tell dnu publish to build the package in C:\Temp instead of my appdata directory?

Update: Finding the culprits: I think the files that exceed the path limit are not in the above log, and that only the successful copies are logged. To test this hypothesis:

  1. I deployed to c:\temp by running dnu publish manually
  2. Copied the files from c:\temp to C:\Users\Christopher\AppData\Local\Temp\PublishTemp
  3. Ran a script to iterate all files recursively and output path lengths that exceed 248 characters. Results:

    C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.FileProviderExtensions\1.0.0-rc1-final\lib\net451\Microsoft.Extensions.Configuration.FileProviderExtensions.dll

    File path long: 249 chars

    C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.FileProviderExtensions\1.0.0-rc1-final\lib\netcore50\Microsoft.Extensions.Configuration.FileProviderExtensions.dll

    File path long: 252 chars

The biggest folder is 191 characters, and with the file it's 252 characters, so that's not exceeding 240 and 260 characters, respectively.

Regardless of all this, how do I tell Visual Studio 2015 to use "C:\temp" as its temp directory, instead of my profile's temp directory?

like image 527
Chris Avatar asked Nov 20 '15 17:11

Chris


People also ask

What is the purpose of the publish dialog in Visual Studio 2015?

The main purpose of publish dialog is provide a simplified way to take the file list which need to be published on your website. In this article I’m going to explain how to publish an MVC web application using the “publish” dialog provided in VS 2015.

How to use “publish” option in Visual Studio 2015?

Click Publish to start the publishing as in the following screenshot: In the output window you can see the result of the publish. Hope this post is useful who are all using the “ Publish ” option in Visual Studio 2015.

Why can't I use a long path in File Explorer?

Since long paths are potentially dangerous, not yet well tested and not properly supported by File Explorer, it is disabled by default. Even if you enable it, programs cannot just use it, for they are likely to have used a fixed-size array to store the path. Therefore, programs have to actually opt-in via manifest. I was wrong.

Can I publish my Visual Studio app to Azure website?

If you are writing an ASP.NET Core application, there are chances to publish your app to either a Azure Website or another place, by right-mouse clicking in Visual Studio. In most cases, it should be alright. However, if your app has a NuGet package with a long name, it would be an issue. You might be seeing an error like this:


2 Answers

Change the temp output to a path with a shorter path name.

  1. Open your target .pubxml in .\Properties\PublishProfiles from a text editor.
  2. Change or add an element called PublishOutputPathNoTrailingSlash under PropertyGroup and set the value to your desired path.
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PublishOutputPathNoTrailingSlash>C:\Temp\Publish</PublishOutputPathNoTrailingSlash>
  </PropertyGroup>
</Project>
like image 110
Dealdiane Avatar answered Nov 27 '22 19:11

Dealdiane


For new asp.net mvc 6 in project.json use

"exclude": [ "wwwroot", "node_modules" ],`
"publishExclude": [ "**.user",  "**.vspscc" ]
like image 36
Борис Вандышев Avatar answered Nov 27 '22 20:11

Борис Вандышев