1

Windows 10 和 Windows Server 2016 为传统的长路径问题引入了解决方案。该解决方案易于实施,并且在以下博客文章中非常详细。按照这些步骤成功地为 .NET 控制台/桌面应用程序工作。但是,出于某种原因,当从 ASP.NET Web 应用程序运行相同的代码时,我仍然会遇到相同的经典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>

和应用程序清单文件,如上面的博客链接中所述。

任何想法表示赞赏。

4

1 回答 1

2

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

解决方案:

对于 ASP.NET Web 应用程序,基于 .NET 4.6.1 或更低版本,请确保在运行该应用程序的机器上也安装了 .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

于 2017-08-03T10:28:26.213 回答