ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

在 VS Code 中使用 Aspire 扩展创建第一个 Aspire 应用:AppHost、资源与依赖编排实战指南

在 VS Code 中使用 Aspire 扩展创建第一个 Aspire 应用:AppHost、资源与依赖编排实战指南 在 VS Code 中使用 Aspire 扩展创建第一个 Aspire 应用AppHost、资源与依赖编排实战指南【免费下载链接】aspireAspire is the tool for code-first, extensible, observable dev and deploy.项目地址: https://gitcode.com/GitHub_Trending/as/aspire本指南以 Aspire 官方 VS Code 扩展的 Create your first Aspire app 入门文档为骨架结合当前仓库中 VS Code 扩展源码、Aspire CLI 与项目模板实现完整讲解如何从零创建第一个 Aspire 应用选择 Starter 模板或空 AppHost、理解 AppHost 这一应用地图中资源Resources、连接Connections与启动顺序Startup order三大核心概念并最终运行起来。读完本文你将掌握通过 VS Code 命令面板创建 Aspire 项目的完整流程并能读懂 AppHost 中的声明式编排代码。从零开始选择 Starter 还是空 AppHostAspire 扩展提供的入门体验非常直接要么为你的技术栈选择一个 Starter 模板要么从一个空的 AppHost 开始。无论走哪条路入口都是同一个 VS Code 命令——aspire-vscode.new对应命令面板中的 Aspire: New Project。在 walkthrough 文档中这一入口被设计为一条可点击的命令链接Create a new Aspire project从扩展源码可以看到这个命令并不是一个孤立实现而是与 CLI 的new子命令一一对应。extension/src/commands/new.ts中的newCommand会通过AspireTerminalProvider把命令转发到专用的 Aspire 终端中执行export async function newCommand(terminalProvider: AspireTerminalProvider, target: CliPathResolutionTarget, cliPath: string) { await terminalProvider.sendAspireCommandToAspireTerminal(new, true, undefined, { target, cliPath }); };命令的注册位于 extension/src/activation/registerCliCommands.ts扩展同时注册了aspire-vscode.new新建、aspire-vscode.init将现有项目初始化为 Aspire 应用、aspire-vscode.add添加集成等一组命令。其中createWithAspireCommand见 extension/src/commands/createWithAspire.ts会把新建应用与加入现有工作区两个流程用结果导向的语言封装成两个快速选择项再分别委托给aspire-vscode.new与aspire-vscode.init从而保证 CLI 调用、目标解析和遥测只由单一实现负责。命令行等价操作如果你更习惯命令行扩展在背后调用的其实是 Aspire CLI 的new子命令。其参数定义位于 src/Aspire.Cli/Commands/NewCommand.cs核心选项如下选项简写说明--name-n项目名称--output-o输出目录--source-s模板源--version无指定 Aspire 版本--channel无模板渠道开启 staging 渠道时描述会相应变化--language无目标语言如 C#--suppress-agent-init无跳过创建后的 Agent 初始化流程创建后的终端体验从AspireTerminalProviderextension/src/utils/AspireTerminalProvider.ts的实现可以看出扩展为 Aspire 命令维护了专用终端Windows 上统一使用 PowerShell优先pwsh.exe回退powershell.exeUnix 上使用 POSIX 引号规则安全拼接命令如果终端支持 Shell Integration则优先通过shellIntegration.executeCommand执行否则回退到sendText。这意味着你始终能在 VS Code 集成终端中看到实际运行的 CLI 命令方便排查问题。理解 AppHost你的应用地图文档中对 AppHost 有一个非常形象的比喻AppHost 是应用的地图。它用一段可编译、可版本化的代码描述整个分布式应用的拓扑而不是依赖散落的 YAML 或文档。这张地图由三个基本要素构成Resources资源描述服务、容器、数据库和前端。资源是构成应用的最小编排单元。Connections连接让依赖关系与配置显式化。资源之间的引用关系被明确写进代码不再靠约定或运气。Startup order启动顺序通过显式的等待关系wait relationships控制依赖资源何时启动避免前端先于 API 启动这类竞态问题。模板中的真实示例以仓库中的 Starter 模板为例src/Aspire.ProjectTemplates/templates/aspire-starter/Aspire-StarterApplication.1.AppHost/AppHost.cs 完整展示了这三大要素如何落地var builder DistributedApplication.CreateBuilder(args); var cache builder.AddRedis(cache); // 资源Redis 容器 var apiService builder.AddProjectProjects.GeneratedClassNamePrefix_ApiService(apiservice) // 资源API 服务项目 .WithHttpHealthCheck(/health); builder.AddProjectProjects.GeneratedClassNamePrefix_Web(webfrontend) // 资源Web 前端 .WithExternalHttpEndpoints() .WithHttpHealthCheck(/health) .WithReference(cache) // 连接前端引用 Redis .WaitFor(cache) // 启动顺序前端等待 Redis 就绪 .WithReference(apiService) // 连接前端引用 API .WaitFor(apiService); // 启动顺序前端等待 API 就绪 builder.Build().Run();在这个不到 20 行的文件中可以清晰看到资源声明AddRedis添加一个 Redis 容器AddProject引入 .NET 项目API 与 Web 前端。仓库的src/Aspire.Hosting下还有大量类似的资源扩展例如AddPostgres、AddKafka、AddMongoDB等覆盖数据库、消息队列、云服务等常见依赖。显式连接WithReference(cache)、WithReference(apiService)把依赖关系写进代码。连接信息如连接字符串、服务端点会被注入到目标资源的配置环境中相关机制可进一步查看 src/Aspire.Hosting/ApplicationModel/ConnectionPropertyAnnotation.cs 与 src/Aspire.Hosting/ApplicationModel/ReferenceEnvironmentInjectionAnnotation.cs 等应用模型注解。启动顺序控制WaitFor(cache)、WaitFor(apiService)建立显式等待关系前端只有在 Redis 与 API 就绪后才会启动。WaitFor的具体语义定义在 src/Aspire.Hosting/ResourceBuilderExtensions.cs 的资源构建扩展中。为什么应用模型值得住在代码里文档明确指出Because the app model lives in code, it stays readable, type-safe, and versioned with the rest of your app应用模型存在于代码中因此与应用的其余部分一起保持可读、类型安全且可版本化。这句话包含三层含义也正是 Aspire 的核心设计哲学可读Readable分布式拓扑用声明式 API 表达读 AppHost 代码即可了解整个系统的依赖关系无需在多个配置文件之间跳转。类型安全Type-safe资源、连接与等待关系都是强类型 API编译期即可发现引用错误、拼写错误和无效配置而不是等到运行时。可版本化VersionedAppHost 与业务代码同处一个仓库、同一套 Git 历史拓扑变更随代码评审一起被审查、被追溯天然支持基础设施即代码的工程实践。下一步继续构建创建完第一个应用后扩展的后续 walkthrough 文档提供了继续深入的路径为应用添加所需依赖从集成库引入数据库、消息、云服务等对应 Add an integration 命令底层为 CLI 的add子命令见 extension/src/commands/add.ts向生产环境迈进通过 Aspire 视图执行部署、发布制品或流水线步骤深入阅读 Aspire 文档获取完整说明。仓库的 extension/walkthrough 目录还提供了配套的入门材料包括 installCli.md安装 Aspire CLI、runApp.md运行应用、dashboard.md使用仪表盘与 nextSteps.md下一步构建可与本文配合阅读。小结从 VS Code 中的一条命令出发你已经走过了 Aspire 入门最关键的一步创建项目、理解 AppHost 这张应用地图、掌握资源/连接/启动顺序三大概念并看到了它们在真实模板代码中的形态。接下来要做的就是打开命令面板运行Aspire: New Project选择适合你技术栈的 Starter 模板或空 AppHost然后看着你的第一个分布式应用在代码中长出来。【免费下载链接】aspireAspire is the tool for code-first, extensible, observable dev and deploy.项目地址: https://gitcode.com/GitHub_Trending/as/aspire创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进