2017-08-03 121 views
1

Windows 10和Windows Server 2016为传统的Long Path问题引入了解决方案。该解决方案很容易实现,并在以下blog文章中详细介绍。以下步骤可成功完成.NET控制台/桌面应用程序。但是,出于某种原因,从ASP.NET Web应用程序运行相同的代码时,我仍然遇到相同的经典System.IO.PathTooLongException异常。来自Web应用程序的.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> 

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

任何想法赞赏。

+1

相关,HTTPS的可能重复: //stackoverflow.com/questions/40722086/uselegacypathhandling-is-not-loaded-properly-from-app-config-runtime-element看起来像在链接问题中有一个解决方法。 – bradbury9

+1

[UseLegacyPathHandling没有从app.config运行时元素正确加载](https://stackoverflow.com/questions/40722086/uselegacypathhandling-is-not-loaded-properly-from-app-config-runtime-element) – bradbury9

+0

谢谢@ bradbury9,它解决了POC上的问题。但是,基于.NET 4.5.1的生产项目没有'AppContext'类来应用解决方案。任何想法? – shimiz

回答

2

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

解决方案:

对于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安装

+0

很高兴帮助;-) – bradbury9