You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Visual Studio 2026多启动项目异常:Web.Api无法被访问

问题分析与解决方案:VS 2026多启动ASP.NET Core项目异常

背景

我有一个包含两个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.Http

StackTrace:
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.exeWeb.Api.exeWeb.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项目的binobj目录
  • 重新打开解决方案,清理并重建整个解决方案后再尝试多启动

5. 检查Web.Api的启动代码

确认Web.Api的Program.cs中没有阻塞启动的代码:

  • 避免在启动阶段执行耗时同步操作
  • 确认Serilog等日志组件配置正确,确保启动时能输出日志(防止因日志组件加载失败导致启动无输出)

内容的提问来源于stack exchange,提问作者M.Bouabdallah

火山引擎 最新活动