"Path too long" 发布时 asp.net 5 从 Visual Studio 2015

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

这似乎是一个常见问题,我发现了几个 Stack Overflow 问题,但它们似乎都与 MSBuild 有关。

我正在尝试通过右键单击 Visual Studio 中的 asp.net 5 rc1 项目并调用基于文件系统的发布配置文件来发布。

它的设置如下所示:

<?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>

这会产生以下输出:

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 ASP.NET@0.0.0 No description
npm WARN package.json ASP.NET@0.0.0 No repository field.
npm WARN package.json ASP.NET@0.0.0 No README data
npm WARN package.json ASP.NET@0.0.0 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.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Mvc.Razor.Host.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\System.Runtime.InteropServices.0.0
Using Package dependency EntityFramework.Commands 7.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\EntityFramework.Commands.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\EntityFramework.Commands.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.CodeAnalysis.CSharp.1.0-rc1-20151109-01
    Source C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Configuration.CommandLine.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.CommandLine.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.DataProtection.Abstractions.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.DataProtection.Abstractions.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\System.Diagnostics.Debug.0.0
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Diagnostics.Debug.0.0
Using Package dependency Microsoft.AspNet.Mvc.TagHelpers 6.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Mvc.TagHelpers.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Mvc.TagHelpers.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.CodeAnalysis.CSharp.1.0-rc1-20151109-01
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Runtime.InteropServices.0.0
Using Package dependency Microsoft.Extensions.Configuration.EnvironmentVariables 1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Configuration.EnvironmentVariables.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Logging.Console.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Identity.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Identity.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.EnvironmentVariables.0.0-rc1-final
Using Package dependency Microsoft.AspNet.Diagnostics 1.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Diagnostics.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Diagnostics.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.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Mvc.ViewFeatures.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Logging.Console.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.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.FileExtensions.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.0.0-rc1-final
    Source C:\Users\Christopher\.dnx\packages\EntityFramework.Core.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\EntityFramework.Core.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.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Logging.Debug.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.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.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.PageExecutionInstrumentation.Interfaces.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.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Dnx.Compilation.Abstractions.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Identity.EntityFramework.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Diagnostics.Abstractions.0.0-rc1-final
Using Package dependency System.Text.Encoding 4.0.0
    Source C:\Users\Christopher\.dnx\packages\System.Text.Encoding.0.0
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Text.Encoding.0.0
    Source C:\Users\Christopher\.dnx\packages\System.Diagnostics.DiagnosticSource.0.0-beta-23516
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Diagnostics.DiagnosticSource.0.0-beta-23516
    Source C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Configuration.FileProviderExtensions.0.0-rc1-final
    Target C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.FileProviderExtensions.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>

我想我的问题是:C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\

我需要使用更短的路径,例如 C:\Temp。

我已经尝试了其他堆栈溢出答案中的一些建议。

<AspnetCompileMergeIntermediateOutputPath>c:\shortPath\</AspnetCompileMergeIntermediateOutputPath> 添加到个人资料似乎没有帮助。

添加 <IntermediateOutputPath>..\Temp</IntermediateOutputPath> 似乎也不起作用。

我猜这是因为这些设置被 MSBuild 获取,而不是 dnu 发布。

那么如何告诉 dnu publish 在 C:\Temp 而不是我的 appdata 目录中构建包?

更新:找到罪魁祸首:我认为超过路径限制的文件不在上面的日志中,并且只记录成功的副本。为了验证这个假设:

  1. 我通过 运行 dnu 手动发布
  2. 部署到 c:\temp
  3. 已将文件从 c:\temp 复制到 C:\Users\Christopher\AppData\Local\Temp\PublishTemp
  4. 运行 递归迭代所有文件并输出超过248个字符的路径长度的脚本。结果:

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

    文件路径长度:249 个字符

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

    文件路径长度:252 个字符

最大的文件夹是 191 个字符,加上文件是 252 个字符,所以分别不超过 240 和 260 个字符。

尽管如此,我如何告诉 Visual Studio 2015 使用 "C:\temp" 作为其临时目录,而不是我的配置文件的临时目录?

我想这就是您要找的:

当您进入 "Publish Web' dialog, you'll need to change the 'Target Location' within the "Connection" 选项卡时。(用...点击方框)然后浏览到 C:\Temp,您的文件就会转到那里...

该对话框不允许您即时创建 C:\Temp,因此如果您尚未创建它,则需要事先创建。

我希望这样做。

将临时输出更改为具有较短路径名的路径。

  1. .\Properties\PublishProfiles 中打开您的目标 .pubxml 文本编辑器。
  2. 更改或添加名为 PublishOutputPathNoTrailingSlashPropertyGroup 下并设置 值到您想要的路径。
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PublishOutputPathNoTrailingSlash>C:\Temp\Publish</PublishOutputPathNoTrailingSlash>
  </PropertyGroup>
</Project>

对于 project.json 中的新 asp.net mvc 6 使用

"exclude": [ "wwwroot", "node_modules" ],`
"publishExclude": [ "**.user",  "**.vspscc" ]