.NET System.IO.PathTooLongException 来自 Web 应用程序

.NET System.IO.PathTooLongException from Web Application

Windows 10 和 Windows Server 2016 引入了传统长路径问题的解决方案。该解决方案易于实施,并且在以下 blog post 中非常详细。按照这些步骤成功运行 .NET console/desktop 应用程序。但是,出于某种原因,当 运行 来自 ASP.NET 网络应用程序的相同代码时,我仍然得到相同的经典 System.IO.PathTooLongException 异常。

抛出异常的代码:

Directory.CreateDirectory(longPath);

正如我提到的,代码在控制台应用程序上成功运行,但在 ASP.NET 网站应用程序中失败。该网站 web.config 包括以下内容:

<?xml version="1.0"?>
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false"/>
  </runtime>
</configuration>

和上面博客 link 中解释的应用程序清单文件。

任何想法表示赞赏。

感谢 @bradbury9 指出了类似的问题,我确认应用程序未能在 运行 时间内加载开关长路径阻塞设置。此外,由于我的应用程序版本基于 .NET 4.5.1,因此无法使用 AppContext class 以编程方式手动设置所需的开关。

解决方案:

对于ASP.NET基于.NET 4.6.1或更低版本的网络应用程序,确保运行s应用程序的机器上也安装了.NET 4.6.2,并添加以下属性 targetFramework="4.6.2" httpRuntime 配置。

示例:

<system.web>
    <httpRuntime targetFramework="4.6.2" />
    <compilation targetFramework="4.5.1" />
</system.web>

* 请注意,支持长路径的Windows,例如Windows Server 2016 和Windows 10,将已经安装了.NET 4.6.2