Windows 10 IIS Express下ASP.Net Web应用触发PathTooLongException问题咨询
ASP.NET Web应用解决System.IO.PathTooLongException异常方案
问题根因:ASP.NET Web应用的运行宿主为IIS/IIS Express进程,项目自身的app.manifest配置不会作用于宿主进程,所以之前的配置不生效。
前置校验
首先确认系统层面长路径支持已正确开启:
- 注册表路径
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem下,LongPathsEnabled的DWORD值设置为1 - 组策略中「计算机配置>管理模板>系统>文件系统>启用Win32长路径」设置为「已启用」
- 修改完成后重启操作系统生效
本地IIS Express调试场景解决方案
两种方案二选一即可:
方案1:修改运行时配置(推荐)
如果项目目标框架为.NET Framework 4.7及以上版本,直接在项目web.config的<configuration>下的<runtime>节点添加配置:
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
修改完成后重启IIS Express即可生效,无需修改系统文件。
方案2:修改IIS Express进程manifest
如果目标框架版本较低,可以修改iisexpress.exe的嵌入manifest:
- 打开Visual Studio开发者命令提示符
- 执行命令修改对应架构的iisexpress.exe,64位路径为
C:\Program Files\IIS Express\iisexpress.exe,32位路径为C:\Program Files (x86)\IIS Express\iisexpress.exe:
mt.exe -manifest "你的manifest文件路径" -outputresource:"对应iisexpress.exe路径;#1"
- 重启IIS Express生效。
正式IIS部署场景解决方案
无需修改IIS宿主程序配置,同样优先使用运行时配置方案:
- 确认项目目标框架为.NET Framework 4.7及以上
- 在
web.config的<runtime>节点添加上述相同的AppContext开关配置 - 重启对应站点的应用程序池生效
全版本兼容方案
如果项目目标框架低于.NET Framework 4.7,可以直接在路径前加Win32长路径前缀\\?\绕过路径长度校验,修改你的代码如下:
File.WriteAllText(@"\\?\C:\LongFileName" + new string('0', 500) + ".txt", "LongFileName");
该方案不需要修改任何系统或项目配置,兼容性最强。如果是访问UNC共享路径,前缀格式为\\?\UNC\服务器地址\共享目录\路径。
内容的提问来源于stack exchange,提问作者Robin Day
相关产品推荐
相关产品推荐

