Visual Studio调试ASP.NET时IIS Express提示所有端口被占用
IIS Express 全端口提示占用问题排查

- 90%以上换多少端口都报占用的问题,都是Windows系统TCP端口排除范围导致的:安装Hyper-V、WSL2、Docker Desktop之后,系统会自动预留大段连续TCP端口给虚拟化服务使用,只要选的调试端口落在这些预留区间内,哪怕用netstat查不到任何程序监听端口,IIS Express绑定的时候也会直接抛出端口占用错误。很多人来回换端口刚好全踩在预留段里,就会误以为所有端口都被占了。
排查排除端口范围的方法:用管理员权限打开PowerShell或者命令提示符,执行命令:netsh interface ipv4 show excludedportrange protocol=tcp
命令输出结果里每段StartPort到EndPort之间的端口,都是系统禁止普通程序绑定的端口段,选调试端口必须避开这些区间。 - 其次是IIS Express残留进程锁死配置:之前调试崩溃、VS非正常退出的时候,iisexpress.exe进程经常会留在后台不退出,不仅占用之前的调试端口,还可能锁死网络配置导致新端口也绑定失败。直接执行命令强杀所有残留进程即可:
taskkill /f /im iisexpress.exe - 本地调试配置文件损坏:每个解决方案根目录下有个默认隐藏的
.vs文件夹,里面存了IIS Express的本地调试配置文件,路径为.vs\config\applicationhost.config,如果这个文件里残留了之前的错误绑定规则,也会导致端口检测逻辑异常。关闭VS之后直接把整个.vs文件夹删掉即可,下次启动VS打开项目时会自动生成全新的干净配置,不会影响项目代码。 - 特殊场景排查:如果安装了第三方安全软件、全局VPN、抓包工具或者网络代理,这类软件有时候会Hook系统网络层,返回虚假的端口占用提示,临时退出这类工具再重试调试即可。
- 端口选择技巧:优先选49152-65535之间的端口,这个区间是官方划定的私有动态端口段,很少被系统服务或者常用软件占用,选之前对照之前查到的排除端口列表确认不在预留段里,基本不会出现绑定失败问题。
内容的提问来源于stack exchange,提问作者Anders Lindén
相关产品推荐
相关产品推荐

