【问题标题】:"Path too long" when publishing asp.net 5 from Visual Studio 2015从 Visual Studio 2015 发布 asp.net 5 时出现“路径太长”
【发布时间】:2016-02-23 07:00:46
【问题描述】:

这似乎是一个常见问题,我发现了几个 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发布 "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 开发实用程序 Clr-x86-1.0.0-rc1-16202 在 project.json 中执行脚本“预发布” npm WARN package.json ASP.NET@0.0.0 无描述 npm WARN package.json ASP.NET@0.0.0 没有存储库字段。 npm WARN package.json ASP.NET@0.0.0 没有 README 数据 npm WARN package.json ASP.NET@0.0.0 没有许可字段。 npm WARN 未满足的依赖项 C:\Source\CCollections\src\CCollections.Client.Web.Angular\node_modules\gulp-cssmin\node_modules\gulp-util 需要 minimist@'^0.2.0' 但会加载 npm WARN 未满足的依赖项 C:\Source\CCollections\src\CCollections.Client.Web.Angular\node_modules\gulp-cssmin\node_modules\minimist, npm WARN 未满足的依赖项,即版本 1.1.1 npm WARN 未满足的依赖项 C:\Source\CCollections\src\CCollections.Client.Web.Angular\node_modules\gulp-cssmin\node_modules\through2 需要 readable-stream@'~1.0.17' 但会加载 npm WARN 未满足的依赖项 C:\Source\CCollections\src\CCollections.Client.Web.Angular\node_modules\gulp-cssmin\node_modules\readable-stream, npm WARN 未满足的依赖项,即版本 1.1.13 [12:15:37] 使用 gulpfile C:\Source\CCollections\src\CCollections.Client.Web.Angular\gulpfile.js [12:15:37] 开始'clean:js'... [12:15:37] 开始'clean:css'... [12:15:37] 8.17 毫秒后完成“干净:js” [12:15:37] 7.58 毫秒后完成“干净:css” [12:15:37] 开始“干净”... [12:15:37] 6.63 μs 后完成“清洁” [12:15:38] 使用 gulpfile C:\Source\CCollections\src\CCollections.Client.Web.Angular\gulpfile.js [12:15:38] 开始'min:js'... [12:15:38] 14 毫秒后完成 'min:js' [12:15:38] 开始'min:css'... [12:15:38] 3.02 毫秒后完成'min:css' [12:15:38] 开始“分钟”... [12:15:38] 6.03 μs 后完成“分钟” [12:15:40] 使用 gulpfile C:\Source\CCollections\src\CCollections.Client.Web.Angular\gulpfile.js [12:15:40] 开始'libcopy'... [12:15:40] 19 毫秒后完成“libcopy” 复制到输出路径 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96 使用包依赖 Microsoft.AspNet.DataProtection.Abstractions 1.0.0-rc1-final 使用包依赖 Microsoft.CodeAnalysis.CSharp 1.1.0-rc1-20151109-01 使用包依赖 Microsoft.AspNet.Identity 3.0.0-rc1-final 使用包依赖 Microsoft.Extensions.Configuration.CommandLine 1.0.0-rc1-final 使用包依赖 Microsoft.Extensions.Logging.Console 1.0.0-rc1-final 使用包依赖 System.Runtime.InteropServices 4.0.0 使用包依赖 System.Diagnostics.Debug 4.0.0 使用包依赖 Microsoft.AspNet.Mvc.Razor.Host 6.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Mvc.Razor.Host\6.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Mvc.Razor.Host\6.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\System.Runtime.InteropServices\4.0.0 使用包依赖EntityFramework.Commands 7.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\EntityFramework.Commands\7.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\EntityFramework.Commands\7.0.0-rc1-final 来源 C:\Users\Christopher\.dnx\packages\Microsoft.CodeAnalysis.CSharp\1.1.0-rc1-20151109-01 源 C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Configuration.CommandLine\1.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.CommandLine\1.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.DataProtection.Abstractions\1.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.DataProtection.Abstractions\1.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\System.Diagnostics.Debug\4.0.0 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Diagnostics.Debug\4.0.0 使用包依赖 Microsoft.AspNet.Mvc.TagHelpers 6.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Mvc.TagHelpers\6.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Mvc.TagHelpers\6.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.CodeAnalysis.CSharp\1.1.0-rc1-20151109-01 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Runtime.InteropServices\4.0.0 使用包依赖 Microsoft.Extensions.Configuration.EnvironmentVariables 1.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Configuration.EnvironmentVariables\1.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Logging.Console\1.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Identity\3.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Identity\3.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.EnvironmentVariables\1.0.0-rc1-final 使用包依赖 Microsoft.AspNet.Diagnostics 1.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Diagnostics\1.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Diagnostics\1.0.0-rc1-final 使用包依赖EntityFramework.Core 7.0.0-rc1-final 使用包依赖 Microsoft.AspNet.Mvc.ViewFeatures 6.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Mvc.ViewFeatures\6.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Mvc.ViewFeatures\6.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Logging.Console\1.0.0-rc1-final 使用包依赖 Microsoft.Dnx.Compilation.Abstractions 1.0.0-rc1-final 使用包依赖 Microsoft.Extensions.Configuration.FileExtensions 1.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Configuration.FileExtensions\1.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.FileExtensions\1.0.0-rc1-final 使用包依赖 Microsoft.AspNet.Identity.EntityFramework 3.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Identity.EntityFramework\3.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\EntityFramework.Core\7.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\EntityFramework.Core\7.0.0-rc1-final 使用包依赖 System.Diagnostics.DiagnosticSource 4.0.0-beta-23516 使用包依赖 Microsoft.Extensions.Logging.Debug 1.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Logging.Debug\1.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Logging.Debug\1.0.0-rc1-final 使用包依赖 Microsoft.AspNet.Diagnostics.Abstractions 1.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.Diagnostics.Abstractions\1.0.0-rc1-final 使用包依赖 Microsoft.AspNet.PageExecutionInstrumentation.Interfaces 1.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.AspNet.PageExecutionInstrumentation.Interfaces\1.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.PageExecutionInstrumentation.Interfaces\1.0.0-rc1-final 使用包依赖 Microsoft.Extensions.Configuration.FileProviderExtensions 1.0.0-rc1-final 源 C:\Users\Christopher\.dnx\packages\Microsoft.Dnx.Compilation.Abstractions\1.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Dnx.Compilation.Abstractions\1.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Identity.EntityFramework\3.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.AspNet.Diagnostics.Abstractions\1.0.0-rc1-final 使用包依赖 System.Text.Encoding 4.0.0 源 C:\Users\Christopher\.dnx\packages\System.Text.Encoding\4.0.0 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Text.Encoding\4.0.0 源 C:\Users\Christopher\.dnx\packages\System.Diagnostics.DiagnosticSource\4.0.0-beta-23516 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\System.Diagnostics.DiagnosticSource\4.0.0-beta-23516 源 C:\Users\Christopher\.dnx\packages\Microsoft.Extensions.Configuration.FileProviderExtensions\1.0.0-rc1-final 目标 C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96\approot\packages\Microsoft.Extensions.Configuration.FileProviderExtensions\1.0.0-rc1-final 错误:指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。 错误:指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。 C:\Source\CCollections\src\CCollections.Client.Web.Angular>

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

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

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

&lt;AspnetCompileMergeIntermediateOutputPath&gt;c:\shortPath\&lt;/AspnetCompileMergeIntermediateOutputPath&gt; 添加到个人资料似乎没有帮助。

添加&lt;IntermediateOutputPath&gt;..\Temp&lt;/IntermediateOutputPath&gt; 似乎也不起作用。

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

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

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

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

    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

    文件路径长:249 个字符

    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

    文件路径长:252 个字符

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

无论如何,我如何告诉 Visual Studio 2015 使用“C:\temp”作为其临时目录,而不是我的配置文件的临时目录?

【问题讨论】:

  • 这发生在发布的哪个阶段?安装节点包时会发生这种情况吗?
  • 如果我在执行dnu publish 期间使用资源管理器查看路径C:\Users\Christopher\AppData\Local\Temp\PublishTemp\CCollections.Client.Web.Angular96,我会在收到错误之前立即在approot/packages 中看到Microsoft.AspNet.PageExecutionInstrumentation.Interfaces 等文件夹。
  • 你能发布你的 dnu 发布的输出吗?此外,您可以通过dnu publish -o &lt;path&gt; 更改输出。
  • 当然可以。编辑了我的帖子以包含完整的输出。
  • 第二次编辑以包含完整输出(无 --quiet 开关)

标签: asp.net-core asp.net-core-mvc dnu


【解决方案1】:

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

  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>

【讨论】:

  • 如果你来达拉斯,我会请你喝啤酒。
  • 如果你来伦敦,我会请你喝啤酒。
  • 如果你来悉尼,我会请你喝啤酒。
  • 如果你去莫斯科,我会给你买点伏特加。
  • 如果你去过巴黎,我知道有人会给你买啤酒
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我想这就是你要找的东西:

    当您进入“发布 Web”对话框时,您需要在“连接”选项卡中更改“目标位置”。(点击方形框...)然后浏览到 C:\Temp然后你的文件就放在那里...

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

    我确实希望这样做。

    【讨论】:

    • 不幸的是,这不起作用有两个原因。 1)我不想发布到临时。 2) 它仍然由于完全相同的原因而失败,因为它用作临时目录的路径(在将文件复制到 c:\temp 之前)太长。
    • 如何更改文件路径以排除点(。)如:CCollections.Client.Web.Angular96 ??
    • 问题在于发布功能使用我的 Windows 配置文件的临时路径来构建它最终将部署的文件。我不知道在哪里指示 Visual Studio 使用较短的路径。
    • 在解决方案资源管理器的“PublishProfiles”下,有一个 xml 文件可以让您修改 _PublishTargetUrl。我的看起来像这样:
    猜你喜欢
    • 2020-01-21
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多