Windows 10 IIS部署.NET应用:AspNetCoreModuleV2无法启动,命令行正常
排查AspNetCoreModuleV2无法启动IIS托管.NET应用的问题
从你的描述来看,命令行能正常跑但IIS托管就失败,连增强日志都没线索,咱们可以从这几个方向逐步挖问题:
1. 先解决进程内模式和反向代理的冲突
你的web.config里同时配置了AspNetCoreModuleV2的inprocess进程内托管,又加了反向代理指向http://escompdata:5000,这俩逻辑根本矛盾:
- 进程内模式下,ASP.NET Core是直接跑在IIS worker进程里的,完全不需要反向代理到外部Kestrel端口
- 反向代理规则会把请求转发到外部Kestrel进程,但此时IIS又在尝试启动进程内的应用,两边互相干扰
调整方案:
- 先把
<rewrite>节点的反向代理规则删掉,进程内模式不需要这玩意儿 - 如果确实需要用反向代理(比如要切换到进程外模式),把
hostingModel改成outofprocess,同时确保应用启动时监听5000端口(或者你指定的其他端口)
2. 确认stdout日志路径的权限
你开了stdout日志但没看到内容?大概率是IIS应用池账号没权限写这个路径:
- 手动在网站根目录建个
logs文件夹 - 给应用池用的管理员账号(或者IIS_IUSRS、AppPoolIdentity)加这个文件夹的完全控制权限
- 重启网站后去
logs里看看,stdout日志里一般会写死启动时的具体错误
3. 重新注册AspNetCoreModuleV2模块
有时候模块没正确注册到IIS,也会导致启动失败:
- 管理员身份开命令提示符,跑这几个命令重新注册:
"%ProgramFiles%\dotnet\dotnet.exe" aspnetcore-module-v2 register iisreset - 注册完重启IIS服务再试
4. 核对web.config里的路径是否绝对正确
虽然命令行能跑,但要确认web.config里的路径没写错:
- 检查
arguments里的c:\escompdata2\ESTemplateCompData.dll是不是真的存在 - 把
stdoutLogFile改成绝对路径试试(比如c:\escompdata2\logs\stdout),避免相对路径解析出问题
5. 切换到进程外模式测试
既然进程内模式有问题,先切到进程外模式验证:
- 修改web.config里的
hostingModel为outofprocess - 确保应用的Program.cs里配置了Kestrel监听端口(比如
builder.WebHost.UseUrls("http://*:5000");) - 重启网站,看能不能正常访问
6. 去系统事件查看器找线索
IIS和ASP.NET Core的启动错误经常会藏在事件查看器里:
- 打开事件查看器,导航到
Windows日志 > 应用程序 - 找来源为
ASP.NET Core或IIS AspNetCoreModuleV2的错误事件,里面会有更详细的异常堆栈
按这个顺序排查,应该能揪出问题所在。
内容的提问来源于stack exchange,提问作者Marc-Arthur




