.Net Core 1.1 中的疯狂深度路径长度

Posted

技术标签:

【中文标题】.Net Core 1.1 中的疯狂深度路径长度【英文标题】:Crazy Deep Path Length in .Net Core 1.1 【发布时间】:2017-07-24 10:57:18 【问题描述】:

有没有人在 .NET Core 1.1 中看到过问题,在 netcoreapp1.1\publish 文件夹下,他们最终会得到一个 bin 文件夹,该文件夹似乎会自行循环,并最终导致路径过长的消息出现在 Windows 中。尝试在 Windows 资源管理器中删除此文件夹会导致出现 Source Too Long 消息。唯一的解决方案是使用RoboCopy。

以下是其中一个生成路径的示例:

bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1 \publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1 \publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1 \publish\bin\release\netcoreapp1.1\publish\bin\release\netcoreapp1.1\publish\bin\release\netcoreapp1.1\publish\bin\release\netcoreapp1.1\publish\bin\release\netcoreapp1.1 \发布\控制器\

这是因为我设置不正确造成的问题吗?

最后一次清理返回以下统计信息:

文件夹:6866 文件:7391

我正在使用以下命令发布:

dotnet publish -c debug

似乎每次发布都会使文件夹结构更深,这似乎与我的项目中创建此文件夹结构的 CShtml 文件有关:

\publish\bin\debug\netcoreapp1.1\publish\Controllers\Account\Views

然后在第二次构建这个结构:

  \publish\bin\debug\netcoreapp1.1\publish\bin\debug\netcoreapp1.1\publish\Controllers\Account\Views

等等……

我正在使用 SDK 1.0.0-preview2-1-003177

【问题讨论】:

如果我没看错,磁盘上确实存在嵌套的文件夹结构吗? 另外,我认为您无法使用 Windows 资源管理器删除该文件夹,因为该程序在许多方面都受限于 MAX_PATH 定义 (260)。您可以编写一个程序来为您删除文件夹。编辑:我想 Robocopy 也可以。真正的问题是路径大于 MAX_PATH 你是如何发布它的? 你用的是什么sdk版本? @marc 我已将此添加到问题中。 【参考方案1】:

我记得我对 .NET Core SDK 的 preview2 有同样的问题。它已在 preview3 或 preview4 中修复。它肯定在 .NET Core SDK 1.0 中得到修复。正如@Marc 所提到的。只需更新您的 SDK https://www.microsoft.com/net/download/core#/sdk。

使用新的 SDK,您的项目将被转换为 csproj 和 MSBuild,因此不再需要 project.json。

编辑:项目将在 VS 2017 中自动转换,如果您使用命令行工具,您应该应用 dotnet-migrate 命令。

【讨论】:

【参考方案2】:

尝试更新 sdk 以发布现在可用的版本。 1.0 版和 1.1 版(在撰写本文时)包含在从此处下载的一个包中。 https://www.microsoft.com/net/download/core

正如@Andrii Litvinov 所提到的,迁移将发生在 VS2017 中。 如果您需要帮助:Microsoft 为 project.json 到 msbuild 提供免费迁移帮助。 (截至本次更新时间为 2017 年 3 月 15 日)

签出:http://landinghub.visualstudio.com/migrate-dotnetcore

【讨论】:

哪里是查找字符串的最佳位置需要添加到global.json文件中以表明它应该使用最新的SDK,即“”1.0.0-preview2-1-003177 “”部分? @MichaelEdwards 它不是项目的一部分,而是环境的一部分。您需要下载并升级您的开发环境。 我已经运行了更新 EXE,但我不知道我现在应该为 Global.json 使用什么字符串值。是否应该自动更新? @MichaelEdwards 不需要更新版本,因为开发环境会在编译时拉取机器上的库。 SDK 是您的开发库中使用的网络核心应用程序库。您的 global.json 以 SDK 库中的特定版本为目标。由于您之前拥有 SDK 的预览版,因此更新实际的 SDK 将确保您项目中使用的任何内容都使用生产代码。

以上是关于.Net Core 1.1 中的疯狂深度路径长度的主要内容,如果未能解决你的问题,请参考以下文章

.net core 浅克隆和深克隆/浅拷贝和深拷贝

.net core 1.1 中的嵌套包含

.Net Core 1.1 中的传递引用

非托管代码中的 ASP Net Core 1.1 和 EF 6 异常?

我想更改 ASP.NET Core 5 MVC 中的路径

有没有办法为 ASP.NET Core 中的内容设置通用根路径?