aspire 是 .net 8+ 提供的云原生应用开发模型和工具链,含脚手架、aspire.hosting 库与 dashboard,用于简化分布式应用的本地开发、服务编排与可观测性集成。

C# Aspire 不是独立框架,而是 .NET 8+ 提供的一套云原生应用开发模型和工具链,核心目标是简化分布式应用的本地开发、服务编排与可观测性集成。
Aspire 是什么:不是新语言,而是 dotnet new aspire 脚手架 + Aspire.Hosting 库 + Dashboard
它不替代 ASP.NET Core 或 Worker Service,而是围绕它们构建“可组合的服务拓扑”。关键组件包括:
-
Aspire.Hosting:提供AddProject<t>()</t>、AddRedis()、AddPostgres()等 API,声明式定义服务依赖关系 - Aspire Host(
AspireAppHost项目):一个专用的 .NET 进程,负责启动/管理所有服务(含容器、本地进程、Azure 资源模拟),并注入连接字符串等配置 - Dashboard(
https://localhost:18888):自动启用的 Web UI,实时显示服务健康、日志、Trace、Metrics,无需额外配置 Prometheus/Grafana
如何创建第一个 Aspire 应用:从 dotnet new aspire 开始
确保已安装 .NET 8 SDK(或更新版本)及 Docker Desktop(用于容器化依赖)。执行:
dotnet new aspire -n MyAspireApp cd MyAspireApp dotnet run --project AppHost/MyAspireApp.AppHost.csproj
运行后会自动打开 Dashboard,并启动默认的 Web API + Worker 组合。注意以下几点:
- 生成的
AppHost项目中,Program.cs里builder.AddProject<webapi>("webapi")</webapi>表示将WebApi项目作为服务加入拓扑,端口由 Aspire 动态分配(非硬编码) - WebApi 项目中的
appSettings.json不再直接写数据库连接字符串;改用builder.Configuration.GetConnectionString("redis"),值由 AppHost 注入 - 若跳过 Docker,部分资源(如
AddPostgres())会 fallback 到本地pg_ctl或失败,需提前确认DOTNET_ASPIRE_DISABLE_CONTAINERS=true环境变量是否设好
常见报错与绕过点:比如 Failed to start container 'postgres' 或 Dashboard not available
这些不是代码错误,而是环境或配置问题:
-
Failed to start container 'postgres':检查 Docker 是否运行;或临时改用内存数据库——把builder.AddPostgres("postgres")换成builder.AddInMemoryDatabase("inmemorydb") -
Dashboard not available:确认AppHost的Program.cs中未调用DisableDashboard();且浏览器访问的是https://localhost:18888(HTTP 重定向可能失效,建议直接输 HTTPS) -
Connection refused在 WebApi 中出现:说明服务间通信失败,优先看 Dashboard 的 “Dependencies” 图——红色连线表示未就绪;常因下游服务(如 Redis)启动慢于上游,可用.WithReference(...).WaitFor(...)显式加等待逻辑
何时该用 Aspire,何时不该用
它适合明确要走向多服务、需要本地可观测性和一键部署验证的团队。但要注意:
- 如果你只开发单体 Web API,且无容器/微服务规划,Aspire 带来的复杂度远大于收益——直接用
dotnet new webapi更轻量 - Aspire 的
AddAzure*扩展(如AddAzureStorage())目前仅模拟行为,不真实创建云资源;生产部署仍需 Azure CLI 或 Bicep - 服务发现基于本地 DNS(
http://service-name),无法跨机器通信;它不是服务网格替代品,也不解决生产环境的流量治理问题
真正容易被忽略的是:Aspire 的价值不在“能跑起来”,而在于它强制你把服务边界、连接方式、生命周期依赖显式表达出来——哪怕只是本地开发阶段,这种建模习惯本身就在降低后续拆分成本。










