求助:如何修复HTTP Error 500.31 - 加载ASP.NET Core运行时失败
解决HTTP Error 500.31 - 加载ASP.NET Core运行时失败问题
问题描述
发布.NET Core 5.0应用至IIS时触发以下错误:
HTTP Error 500.31 - Failed to load ASP.NET Core runtime
常见解决方案:未找到指定版本的Microsoft.NetCore.App或Microsoft.AspNetCore.App。
故障排除步骤:
- 检查系统事件日志中的错误信息
- 启用应用进程的stdout消息日志记录
- 将调试器附加到应用进程并检查
当前web.config配置:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\AppCore.dll" stdoutLogEnabled="false" hostingModel="inprocess" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/> </system.webServer> </configuration>
已安装ASP.NET Core Runtime 5.0.17托管包,因需求限制必须使用.NET 5。
.NET环境信息:
解决方案
1. 验证运行时版本与架构匹配
- 检查应用项目文件(
.csproj)中的目标框架和运行时标识配置,确保与服务器安装的运行时一致:<TargetFramework>net5.0</TargetFramework> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <!-- 需与服务器操作系统架构一致,如x86/x64 --> - 打开服务器的
控制面板>程序>程序和功能,确认已安装的**ASP.NET Core 5.0 Runtime(托管包)**版本为5.0.17,且架构与应用发布时指定的一致。
2. 启用stdout日志获取详细错误
- 修改web.config中的
stdoutLogEnabled为true,并确保logs目录存在且应用池有权限写入:<aspNetCore processPath="dotnet" arguments=".\AppCore.dll" stdoutLogEnabled="true" hostingModel="inprocess" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/> - 重启IIS站点后访问应用,查看
logs目录下的日志文件,可获取运行时加载失败的具体原因(如缺失依赖、版本不匹配等)。
3. 检查应用池配置
- 将应用池的**.NET CLR版本**设置为
无托管代码,ASP.NET Core应用无需依赖IIS的托管CLR。 - 确认应用池身份拥有应用文件目录的读取权限,以及系统.NET运行时文件的访问权限。
4. 重新安装运行时
- 卸载服务器上已有的ASP.NET Core 5.0.17托管包,下载对应架构的官方安装包重新安装,完成后重启服务器。
- 运行命令
dotnet --list-runtimes,确认输出中包含Microsoft.AspNetCore.App 5.0.17和Microsoft.NETCore.App 5.0.17。
5. 切换托管模式测试
- 当前配置使用
inprocess托管模式,若AspNetCoreModuleV2版本存在兼容问题,可尝试切换为outofprocess模式:<aspNetCore processPath="dotnet" arguments=".\AppCore.dll" stdoutLogEnabled="true" hostingModel="outofprocess" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
内容的提问来源于stack exchange,提问作者Siwar Hadj Ali
相关产品推荐
相关产品推荐

