跳转到内容

ASP.NET Core 上 IIS:Hosting Bundle、ANCM 与 500.30

核验于 1 分钟阅读

安装 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
页面类型
配置
  1. 装 ASP.NET Core Hosting Bundle(含 runtime + ANCM)。
  2. 发布应用(dotnet publish -c Release)。
  3. IIS 站点指向 publish 目录。
  4. 应用池设 No Managed Code。
  5. 500.30 先读应用 stdout 日志,不要重装 IIS。

下载与应用主版本匹配的 Hosting Bundle,安装后:

终端窗口
dotnet --list-runtimes
Get-WebGlobalModule -Name AspNetCoreModuleV2

必须有 AspNetCoreModuleV2。没有就修复 Hosting Bundle 并重启 IIS。

终端窗口
dotnet publish C:\src\app\App.csproj -c Release -o C:\sites\app

publish 输出含 ANCM handler 的 web.config。除非懂 schema,不要手写。

  • 物理路径:C:\sites\app
  • 应用池:新建,No Managed Code
  • 绑定:HTTPS + 正确证书
  • 身份:应用池身份对 publish 目录读/执行
<aspNetCore processPath="dotnet" arguments=".\App.dll"
hostingModel="inprocess" />
  • in-process:应用跑在 w3wp.exe 内,更快,现代模板默认。
  • out-of-process:ANCM 启动 dotnet App.dll;能看到独立进程,开销略大。

选一个;不要在不同环境混用 hostingModel 而不测试。

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 StatusCode
Get-Content C:\sites\app\logs\stdout_*.log -Tail 50
Get-IISAppPool | Where-Object Name -eq 'apppool'

看响应、stdout 日志和池身份。不要靠盲目回收调试。

E1。实验室没有装 Hosting Bundle 或部署 ASP.NET Core 应用;步骤是 Server 2025 的生产检查表。

来源