使用Visual Studio调试ASP.NET Core应用时启动失败及除零错误
问题描述
使用Visual Studio调试ASP.NET Core项目时,浏览器打开新标签页持续加载,随后调试提前终止,出现以下现象:
- Visual Studio输出窗口重复出现:
最终输出:EventSource Error: ERROR: Exception during EventCounter cpu-usage metricProvider callback: Attempted to divide by zero. The thread '[Thread Destroyed]' (13472) has exited with code 0 (0x0).EventSource Error: Reached message limit. End of EventSource error messages. The program '[9144] iisexpress.exe' has exited with code 0 (0x0). - 浏览器显示错误:
HTTP Error 500.37 - ASP.NET Core app failed to start within startup time limit
已尝试操作:
- 重新安装Visual Studio
- 将内存占用降至约60%
- 修改IIS Express应用URL端口
备注:曾偶然调试成功一次,但后续失效;项目在其他电脑可正常运行,最初内存占用96%,降内存后问题依旧。
排查与解决步骤
1. 禁用EventCounter CPU监控
输出中的Attempted to divide by zero错误来自CPU使用率MetricProvider回调异常,属于ASP.NET Core性能监控组件问题,可通过配置禁用相关监控:
- 在项目
Program.cs中修改WebHost配置:
或在var builder = WebApplication.CreateBuilder(args); // 添加禁用EventCounter配置 builder.WebHost.ConfigureServices(services => { services.Configure<EventCounterOptions>(options => { options.DisableEventCounters = true; }); });appsettings.json中添加配置:{ "EventCounterOptions": { "DisableEventCounters": true } }
2. 延长ASP.NET Core启动超时时间
针对HTTP Error 500.37,修改IIS Express配置延长启动超时:
- 找到项目根目录下的
.vs\config\applicationhost.config文件(.vs为隐藏文件夹) - 定位对应
<site>节点下的<application>标签,添加或修改startupTimeLimit属性(如设置为300秒):<application path="/" applicationPool="Clr4IntegratedAppPool" startupTimeLimit="300"> <virtualDirectory path="/" physicalPath="你的项目物理路径" /> </application>
3. 排查本地环境依赖差异
由于项目在其他电脑正常运行,重点检查本地环境差异:
- 执行
dotnet --version查看本地.NET Core SDK版本,确保与项目要求一致,版本不匹配则安装对应版本 - 清理项目的
bin和obj目录,重新生成解决方案 - 禁用Visual Studio第三方扩展(路径:工具 -> 扩展和更新),重启VS后重试调试
4. 定位启动代码阻塞点
偶然成功说明启动逻辑存在不稳定阻塞环节:
- 在
Program.cs(或旧模板的Startup.cs)中添加日志,标记启动各阶段的耗时 - 检查是否存在同步调用远程接口、数据库初始化等阻塞操作,改为异步实现
内容的提问来源于stack exchange,提问作者Danu Hary P
相关产品推荐
相关产品推荐

