You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 5应用IIS Express与自托管启动逻辑及端口差异问询

1. Main()方法断点命中时机差异的原因

两种启动方式对应不同的托管执行逻辑:

  • 以项目名直接运行时,是直接启动dotnet进程加载你的应用程序集,启动流程会直接执行程序入口Main()方法完成应用初始化、启动Kestrel服务器,所以启动时断点会立刻命中。
  • 以IIS Express运行时,IIS Express本身是反向代理服务器,启动时仅完成自身服务初始化、端口监听、ASP.NET Core模块(ANCM)加载,不会启动你的应用进程。只有当第一个HTTP请求到达IIS Express时,ANCM才会触发启动你的ASP.NET Core应用进程,此时才会执行Main()方法,所以断点要等首次请求才会命中。

2. IIS Express启动后、首次请求前运行的代码

这一阶段仅执行IIS Express自身的初始化逻辑,不会执行你写的应用代码:

  • 读取IIS Express配置文件(applicationhost.config),加载当前站点的绑定规则、权限配置、模块注册信息
  • 启动HTTP.sys监听器,绑定配置好的HTTP、HTTPS端口等待请求
  • 初始化ASP.NET Core模块(ANCM),但不会触发应用进程启动

3. 端口配置差异的原因

两者的端口配置逻辑完全独立:

  • 以项目名直接运行是Kestrel自托管模式,5000(HTTP)、5001(HTTPS)是ASP.NET Core 5框架内置的默认端口,你可以通过appsettings.json、环境变量、命令行参数自定义修改。
  • IIS Express的端口是IIS Express的分配逻辑生成的,为了避免同一设备上多个IIS Express站点的端口冲突,默认会给每个站点随机分配两个未被占用的高位端口分别对应HTTP和HTTPS,你也可以在项目的launchSettings.json或者IIS Express站点配置中手动指定固定端口。

内容的提问来源于stack exchange,提问作者David Klempfner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:09:00