ASP.NET Core 上 IIS:Hosting Bundle、ANCM 与 500.30
安装 ASP.NET Core Hosting Bundle,发布应用,应用池设为 No Managed Code,并靠 stdout 日志定位 500.30/502.5。
测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1- 版本号
- 26100.33650
- 版本
- Standard / Datacenter
- 架构
- x64
- 支持
- 文档(E1)
- 证据
- E1官方文档
- 核验日期
- 2026-10-29
- 页面类型
- 配置
- 装 ASP.NET Core Hosting Bundle(含 runtime + ANCM)。
- 发布应用(
dotnet publish -c Release)。 - IIS 站点指向 publish 目录。
- 应用池设 No Managed Code。
- 500.30 先读应用 stdout 日志,不要重装 IIS。
下载与应用主版本匹配的 Hosting Bundle,安装后:
dotnet --list-runtimesGet-WebGlobalModule -Name AspNetCoreModuleV2必须有 AspNetCoreModuleV2。没有就修复 Hosting Bundle 并重启 IIS。
dotnet publish C:\src\app\App.csproj -c Release -o C:\sites\apppublish 输出含 ANCM handler 的 web.config。除非懂 schema,不要手写。
IIS 站点
Section titled “IIS 站点”- 物理路径:
C:\sites\app - 应用池:新建,No Managed Code
- 绑定:HTTPS + 正确证书
- 身份:应用池身份对 publish 目录读/执行
in-process 与 out-of-process
Section titled “in-process 与 out-of-process”<aspNetCore processPath="dotnet" arguments=".\App.dll" hostingModel="inprocess" />- in-process:应用跑在
w3wp.exe内,更快,现代模板默认。 - out-of-process:ANCM 启动
dotnet App.dll;能看到独立进程,开销略大。
选一个;不要在不同环境混用 hostingModel 而不测试。
500.30 / 502.5
Section titled “500.30 / 502.5”500.30 是应用启动失败。在 web.config 开 stdout:
<aspNetCore processPath="dotnet" arguments=".\App.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />读 logs\stdout_*.log。常见:
- 缺 runtime 版本;
arguments路径错;- 启动时抛异常(配置/DB/证书);
- 应用池身份读不了目录或写不了日志;
- 端口/URL 绑定冲突。
502.5 同族:ANCM 起不来进程。
Invoke-WebRequest https://app.example/ -UseBasicParsing | Select-Object StatusCodeGet-Content C:\sites\app\logs\stdout_*.log -Tail 50Get-IISAppPool | Where-Object Name -eq 'apppool'看响应、stdout 日志和池身份。不要靠盲目回收调试。
E1。实验室没有装 Hosting Bundle 或部署 ASP.NET Core 应用;步骤是 Server 2025 的生产检查表。