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