本地IIS部署.NET 4.7网站时aspnetcore.dll加载失败求助
问题描述
在本地IIS部署运行基于.NET 4.7的旧网站时,触发错误:
模块DLL C:\WINDOWS\system32\inetsrv\aspnetcore.dll加载失败,错误数据已记录
核心疑问:.NET 4.7框架的网站为何会尝试加载ASP.NET Core的aspnetcore.dll?
已执行的无效操作:安装ASP.NET Core运行时、重启IIS、重启电脑,问题仍存在,且错误触发后网站对应的应用池会自动关闭。
事件查看器错误详情截图:
解决思路
检查网站的IIS模块配置
登录IIS管理器,定位到目标网站,查看「模块」列表,若存在AspNetCoreModuleV2或其他ASP.NET Core相关模块,直接移除;同时检查站点根目录的web.config,查看<system.webServer><modules>节点下是否有ASP.NET Core模块的注册配置,如有则删除该配置段。确认应用池的.NET CLR版本设置
打开目标网站对应的应用池,检查「.NET CLR版本」是否设置为v4.0.30319(对应.NET 4.7),而非「无托管代码」(ASP.NET Core应用的默认设置)。错误的版本设置会导致IIS误加载ASP.NET Core模块。排查全局IIS模块冲突
打开服务器级别的配置文件%windir%\system32\inetsrv\config\applicationHost.config,检查<globalModules>和<modules>节点,若发现AspNetCoreModule相关的全局注册条目,可尝试将其移除,或修改配置为仅针对特定站点加载该模块。修复ASP.NET Core托管捆绑包
即使是.NET Framework网站,若IIS全局注册了ASP.NET Core模块,也需要确保托管捆绑包安装完整。重新下载对应版本的ASP.NET Core托管捆绑包进行修复安装,之后再次重启IIS。检查应用池身份权限
验证应用池的运行身份是否拥有C:\WINDOWS\system32\inetsrv目录的读取权限。若权限不足,会导致dll加载失败。可临时将应用池身份改为LocalSystem进行测试,确认问题后再给原有身份添加该目录的读取权限。
内容的提问来源于stack exchange,提问作者JimboJones

