Azure Windows Server中ASP.NET Core API启动失败(500.30)求助
.NET Core运行时版本不兼容或冲突
用命令dotnet --list-runtimes检查该服务器已安装的.NET Core运行时版本,对比项目的TargetFramework配置。即使其他服务器正常,这台机器可能存在版本缺失、版本过高/过低,或是多版本安装引发的冲突。比如项目目标为.NET 6.0.10,但服务器仅安装了.NET 6.0.1,部分修补版本的差异可能触发加载失败。应用程序池配置错误
- 确认应用程序池的
.NET CLR版本设置为无托管代码,ASP.NET Core应用不依赖IIS托管运行时,若设置为其他.NET Framework版本会直接导致CoreCLR加载失败。 - 检查应用程序池标识的权限:如果使用
ApplicationPoolIdentity,需确保该账户对应用物理路径C:\xxxxx和.NET Core安装目录(默认C:\Program Files\dotnet)有读取权限。
- 确认应用程序池的
系统环境变量异常
验证DOTNET_ROOT环境变量是否指向正确的dotnet安装路径,同时检查PATH变量中是否包含该路径。若环境变量配置错误,IIS进程无法定位到coreclr.dll文件,进而启动失败。应用部署包损坏或不完整
对比正常服务器的应用文件目录,检查这台服务器上的部署包是否存在文件缺失或损坏。比如发布时遗漏了运行时依赖的DLL,或是传输过程中文件损坏。建议重新部署完整的发布包,确保包含所有必需的运行时文件。Windows Server系统组件损坏
服务器的Windows更新、VC运行库或IIS模块(如AspNetCoreModuleV2)可能损坏。可以尝试修复AspNetCoreModule,运行dotnet dev-certs https --clean后重新注册模块;或者修复VC可再发行组件包,确保CoreCLR依赖的系统组件正常。架构不匹配
若应用编译为x64架构,但应用程序池开启了启用32位应用程序选项,会导致无法加载64位的CoreCLR。反之,32位应用在64位池也可能出现问题,需确保编译架构与应用程序池配置一致。进程或端口冲突
虽然错误提示是加载CoreCLR,但应用启动时绑定的端口被其他进程占用,可能导致CoreCLR初始化过程中断。用netstat -ano命令检查端口占用情况,确认应用所需端口未被占用。
内容的提问来源于stack exchange,提问作者David Ruiz

