【问题标题】:.NET System.IO.PathTooLongException from Web Application来自 Web 应用程序的 .NET System.IO.PathTooLongException
【发布时间】:2017-08-03 18:28:26
【问题描述】:

Windows 10 和 Windows Server 2016 引入了针对传统长路径问题的解决方案。该解决方案易于实施,并且在以下blog 帖子中非常详细。按照这些步骤成功地为 .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>

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

任何想法表示赞赏。

【问题讨论】:

  • 相关的,可能与stackoverflow.com/questions/40722086/… 重复似乎链接的问题中有解决方法。
  • 谢谢@bradbury9,它解决了 POC 上的问题。但是,基于 .NET 4.5.1 的生产项目没有 AppContext 类来应用解决方案。有什么想法吗?
  • 如果项目使用没有AppContext 的框架,很可能.config AppContextSwitchOVerrides 将不起作用,因为上下文不存在。我不知道如何在 4.5.1 中解决它
  • @bradbury9 谢谢,我解决了这个问题,你可以看到解决方法。在我看来,这几乎是重复,但重点和解决方案使它与众不同。

标签: c# asp.net windows-server-2016 pathtoolongexception


【解决方案1】:

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

解决方案:

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

例子:

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

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

【讨论】:

  • 很高兴为您提供帮助 ;-)
猜你喜欢
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 2011-07-08
  • 2023-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多