【发布时间】:2021-11-19 21:00:51
【问题描述】:
问题:我正在开发一个程序来获取树的输出并在不同的系统上重新创建目录结构。我的代码适用于我随机创建的测试文件集。但是,在处理具有详细/长文件夹名称的系统时,我遇到了 System.IO.IOException '(文件名或扩展名太长)在此代码上
String path = @".\" + PreviousDirectory + @"\";
int errorCheck = path.Length;
Directory.SetCurrentDirectory(path, PathFormat.LongFullPath);
尝试的解决方案: 我发现这个thread 描述了几个选项。我已经尝试了很多我目前没有使用 System.IO 我正在使用 AlphaAeonis.Win32.Filesytem,它应该支持路径中的 32,000 个字符,但是我的错误发生在 282 个字符长的路径上。
我也在尝试使用 .Net Framework 4.6.2 或更高版本,它删除了路径限制。我在使用的 Visual Studio 2017 中将目标框架更改为 4.6.2,我还安装了 .NET SDK 6.0.0。我的 app.config 文件控制 Visual Studio 如何运行代码,如下所示
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
</startup>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false"/>
</runtime>
如果我更改为除 version = v"4.0" 之外的任何内容,尽管安装了更高版本的框架,我仍被要求安装该版本的 .NET。我假设 v4.0 是实际运行的。
问题:
一个。如何确保所有 Directory 函数都使用导入的 Alphaleonis 库中的 Override?p>
b.如何确保运行时的最低 .Net 版本?
c。我还能设置什么来允许长路径?
【问题讨论】:
-
我自己使用
Pri.LongPath,在 NuGet 上可用。我还没有尝试过您提到的线程中的this 解决方案,但我喜欢它! -
我试过了,但运气不好,但我会试试 pri.longpath
-
.NET 6 用于 .NET-Core。 (这是不同的运行时......)这很令人困惑,因为他们在 3.1 之后删除了“-Core”术语并跳过了版本 4,以避免与比 -Core1 更早的 .NET4.8 混淆。如果您使用的是 .NET6 SDK,则应以 .NET6 为目标(这是核心运行时...)您应该能够将核心与您的应用程序捆绑在一起......选择“自包含”而不是“依赖于框架” " 构建/发布时。
-
顺便说一句,.NET5 和 .NET6 仍然很新。如果要切换到core,我认为.NET-Core 3.1是长期支持版本。
-
@pcalkins 从 .Net Framework 切换到 .net core 做到了,谢谢,是的,它们可能是新的,但我尝试了任何版本,基本上这些都是最新的,它是一次性工具,所以没什么大不了的
标签: c# .net visual-studio