Visual Studio 2026多启动项目异常:Web.Api无法被访问
背景
我有一个包含两个ASP.NET Core项目的解决方案:
Web.Api— 极简API,监听地址为https://localhost:7124(及http://localhost:5247)Web.UI— Blazor Server应用,监听地址为https://localhost:7063,通过IHttpClientFactory调用Web.Api
Web.UI首次加载页面时会调用Web.Api(中间件会检查API端点),因此两个项目必须同时运行。
问题现象
通过两个终端分别运行两个项目时一切正常:
# 终端1 cd Web.Api dotnet run --launch-profile https # -> Now listening on: https://localhost:7124 # 终端2 cd Web.UI dotnet run --launch-profile https # -> Now listening on: https://localhost:7063
Web.UI加载正常,能成功调用Web.Api。
但使用Visual Studio 2026的「多启动项目」功能(两个项目均设置为「启动」)时,Web.UI可加载,但调用Web.Api失败,报错如下:
System.Net.Http.HttpRequestException
HResult=0x80004005
Message=No connection could be made because the target machine actively refused it. (localhost:7124)
Source=System.Net.HttpStackTrace:
at System.Net.Http.HttpConnectionPool.d__54.MoveNext()
at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable1.ConfiguredValueTaskAwaiter.GetResult() at System.Net.Http.HttpConnectionPool.<ConnectAsync>d__53.MoveNext() at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable1.ConfiguredValueTaskAwaiter.GetResult()
at System.Net.Http.HttpConnectionPool.d__81.MoveNext()
at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable1.ConfiguredValueTaskAwaiter.GetResult() at System.Net.Http.HttpConnectionPool.<InjectNewHttp11ConnectionAsync>d__80.MoveNext() at System.Threading.Tasks.TaskCompletionSourceWithCancellation1.d__1.MoveNext()
at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable1.ConfiguredValueTaskAwaiter.GetResult() at System.Net.Http.HttpConnectionPool.<SendWithVersionDetectionAndRetryAsync>d__52.MoveNext() at System.Net.Http.DiagnosticsHandler.<SendAsyncCore>d__10.MoveNext() at System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable1.ConfiguredValueTaskAwaiter.GetResult()
at System.Net.Http.RedirectHandler.d__4.MoveNext()
at System.Net.Http.SocketsHttpHandler.<g__CreateHandlerAndSendAsync|115_0>d.MoveNext()
at Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.<g__Core|4_0>d.MoveNext()
at Web.UI.Authentication.JwtDelegatingHandler.d__3.MoveNext() in C:\Users\Mahfoud\source\repos\SmartHR\src\SmartHR\Web.UI\Authentication\JwtDelegatingHandler.cs:line 39
at Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.<g__Core|4_0>d.MoveNext()This exception was originally thrown at this call stack:
[External Code]Inner Exception 1:
SocketException: No connection could be made because the target machine actively refused it.
按下F5后两个控制台窗口均会打开,但Web.Api控制台完全空白——无Serilog启动横幅、无「Now listening on...」信息,仿佛进程已启动但未绑定端口。
已验证内容
- 启动前执行
netstat -ano | findstr 7124无结果(端口空闲,无孤立进程占用) - 任务管理器中无
dotnet.exe、Web.Api.exe或Web.UI.exe残留进程 dotnet dev-certs https --check --trust显示「A trusted certificate was found」- 在VS中单独启动Web.Api正常——可绑定7124端口,
https://localhost:7124/health能正常响应 - 通过终端运行两个项目正常
- 重启Windows后问题依旧
相关配置
Web.Api的launchSettings.json
{ "profiles": { "https": { "commandName": "Project", "launchBrowser": false, "applicationUrl": "https://localhost:7124;http://localhost:5247", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }
Web.UI的HttpClient注册代码
builder.Services.AddHttpClient("WebApi", client => { client.BaseAddress = new Uri(builder.Configuration["WebApi:BaseUrl"]!); }) .AddHttpMessageHandler<JwtDelegatingHandler>();
Web.UI的appsettings.json中WebApi:BaseUrl的值为https://localhost:7124。
推测原因
VS 2026多启动项目功能启动时,Web.Api虽打开控制台窗口,但实际未完成启动(或未绑定端口),且无错误信息输出。
解决方案
1. 调整多启动项目的启动顺序与延迟
VS默认同时启动所有标记为「启动」的项目,但Web.UI启动后会立即调用Web.Api,此时Web.Api可能还未完成初始化:
- 右键解决方案 → 选择「属性」→ 进入「启动项目」选项卡
- 选择「多个启动项目」,将Web.Api的「操作」设为「启动」,Web.UI的「操作」设为「启动,但延迟启动」
- 设置3-5秒的延迟时间,确保Web.Api有足够时间完成端口绑定和服务初始化
2. 检查VS调试配置的项目属性
- 右键Web.Api项目 → 选择「属性」→ 进入「调试」选项卡
- 确认「启动配置文件」选择
https,且「应用URL」与launchSettings.json中的配置一致 - 临时勾选「启动浏览器」,验证Web.Api启动时是否能正常输出日志
- 检查「环境变量」是否正确设置
ASPNETCORE_ENVIRONMENT=Development
3. 手动编辑解决方案的.slnLaunch配置文件
若VS UI配置无效,可直接编辑解决方案目录下的.slnLaunch文件(不存在则创建),指定启动顺序和延迟:
{ "version": "1.0", "projects": [ { "projectPath": "Web.Api/Web.Api.csproj", "commandName": "Project", "launchProfile": "https", "launchDelay": 3000 }, { "projectPath": "Web.UI/Web.UI.csproj", "commandName": "Project", "launchProfile": "https" } ] }
保存后重新加载解决方案,再尝试多启动。
4. 重置VS调试环境
- 关闭所有VS窗口,删除解决方案目录下的
.vs隐藏文件夹 - 清空Web.Api和Web.UI项目的
bin、obj目录 - 重新打开解决方案,清理并重建整个解决方案后再尝试多启动
5. 检查Web.Api的启动代码
确认Web.Api的Program.cs中没有阻塞启动的代码:
- 避免在启动阶段执行耗时同步操作
- 确认Serilog等日志组件配置正确,确保启动时能输出日志(防止因日志组件加载失败导致启动无输出)
内容的提问来源于stack exchange,提问作者M.Bouabdallah




