关于 aspire-init
aspire-init 是用于在仓库中引入 Aspire 或创建新 Aspire 项目的 Agent 技能。它选择合适的模板,或添加最小 AppHost 骨架;对于现有仓库,则将资源接线交给 aspireify。
主要功能
- 01检查现有 AppHost 文件
- 02选择 aspire new 或 aspire init
- 03通过模板创建项目
- 04为现有仓库添加骨架
- 05将资源接线交给 aspireify
适用场景
- 01从模板启动新的 Aspire 项目
- 02在现有服务旁添加 AppHost 骨架
- 03判断现有工作区是否可初始化
MCP 相关
该技能说明,MCP 服务配置需单独选择;Aspire 13.6 及更高版本的串联 Agent 设置不会创建此配置。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ microsoft/ aspire-skills --skill aspire-init安装后在 Claude Code 中输入/aspire-init确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/eval.yamlreferences/init-workflow.mdtemplates.md详细介绍
Aspire Init
仅用于首次运行。 此技能负责为尚无 Aspire AppHost 的代码仓库添加基础骨架并选择模板。骨架就位后,移交给
aspireify来实际连接资源。
先决条件
| 要求 | 安装 |
|---|---|
| .NET 10.0 SDK | https://dotnet.microsoft.com/download |
Node.js ^20.19.0、^22.13.0 或 >=24(TypeScript AppHost) | https://nodejs.org |
| Aspire CLI(curl 安装程序) | curl -sSL https://aspire.dev/install.sh | bash |
| Aspire CLI(npm) | npm install -g @microsoft/aspire-cli |
| Aspire CLI(NativeAOT 全局工具) | dotnet tool install -g Aspire.Cli(需要 .NET 10) |
| 诊断缺失的先决条件 | aspire doctor |
Aspire 还支持 Nix、Homebrew、WinGet、mise 以及 curl/PowerShell 安装程序。 使用用户环境现有的安装方式。
检测
仅当为尚未包含 Aspire 的工作区添加 Aspire 时才激活。在运行 aspire init 前,确认以下条件全部成立:
| 信号 | 检测方式 | 含义 |
|---|---|---|
| 没有 C# AppHost | 没有包含 Aspire.AppHost.Sdk 的 .csproj | 可以初始化 |
| 没有基于文件的 AppHost | 没有包含 #:sdk Aspire.AppHost.Sdk 的 apphost.cs | 可以初始化 |
| 没有 TypeScript AppHost | 代码仓库中没有当前使用的 apphost.mts 或旧版 apphost.ts | 可以初始化 |
| 没有 Aspire 配置 | 代码仓库根目录中没有 aspire.config.json | 可以初始化 |
| 用户意图 | 明确提出“添加 Aspire”“搭建 Aspire 骨架”或“aspire init” | 可以初始化 |
如果已存在任何 AppHost 信号,请勿运行 aspire init。转交给
aspireify(重新连接资源)或
aspire-orchestration(生命周期)。
决策:aspire new 与 aspire init
| 情况 | 命令 | 原因 |
|---|---|---|
| 空目录或全新项目 | aspire new <template> | 生成完整的起始解决方案 |
| 有待建模服务的现有代码仓库 | aspire init | 在现有代码旁添加最小骨架和 aspire.config.json |
| 用户想要一个示例来学习 | aspire new aspire-starter | 包含 ApiService、Web 和 ServiceDefaults |
| 用户想要尽可能精简的脚手架 | aspire new aspire-empty(C#)或 aspire new aspire-ts-empty(TS) | 不预先连接任何资源 |
| 用户想要 Python 服务 | aspire new aspire-py-starter(由 TypeScript AppHost 驱动 Python) | 不是 dotnet new——该模板已在 13.3 中移除 |
完整模板列表和选项请参见 references/templates.md。
工作流 A — aspire new <template>(新项目)
适用于空目录或尚不存在的目录中的全新项目:
- 如果不确定 CLI 是否已安装,请运行
aspire doctor确认先决条件。 - 从 references/templates.md 中选择模板。
- 运行模板;在 Agent 流程中追加
--non-interactive:aspire new aspire-starter --name MyApp --output ./MyApp --non-interactive - 模板会为新目录完成全部连接——无需移交给 aspireify。
- 首次运行时(
aspire start),转交给aspire-orchestration。
工作流 B — aspire init(现有仓库)
对于已有服务(Express API、.NET API、Python 服务等)的仓库,需要在旁边添加 AppHost:
- 查看 检测 表 — 确认没有 AppHost。
- 运行
aspire init,在非交互式流程中明确选择语言:aspire init --language csharp --non-interactive # or aspire init --language typescript --non-interactive aspire init会生成:- AppHost 骨架(包含
#:sdk指令的apphost.cs,或包含生成的.aspire/modules/文件夹的apphost.mts) - 描述语言和 AppHost 路径的 AppHost 配置
- 放入项目技能目录的
aspireifyAgent 技能(与aspire agent init使用的目录相同)。在 13.6+ 中,串联的 Agent 设置会预选推荐技能,包括aspireify,且不会提供 Aspire MCP 服务配置选项。如果成功初始化后缺少 MCP 配置,这是预期行为,并非缺陷。MCP 是单独选择启用的选项;请参阅aspire路由器的 Skills vs. MCP 指南。
- AppHost 骨架(包含
- 移交给
aspireify—aspire init不会自行连接资源、项目或集成。 aspireify完成连接后,通过aspire start验证 (aspire-orchestration)。
在 13.5 中,如果 TypeScript 初始化是在已有根目录 package.json 的仓库中进行,会创建嵌套的 aspire-apphost/ 包,并将根目录的 aspire.config.json 指向 aspire-apphost/apphost.mts。基于解决方案的 C# 仓库可以接收基于项目的 AppHost;新的 C# AppHost 默认启用 AspireUseCliBundle=true。请保留这些生成的设置。
完整流程(包括 aspire.config.json 的内容以及 aspire init 中途失败时的处理方式)请参阅 references/init-workflow.md。
移交规则
aspire init / aspire new 完成后…… | 移交至 |
|---|---|
| 已生成骨架,需要连接资源 | → aspireify 技能(插件内或项目本地) |
| 已生成骨架,需要验证是否能启动 | → aspire-orchestration(运行 aspire start) |
| 已从模板创建新项目,可以运行 | → aspire-orchestration |
| 用户在初始化后要求部署 | → aspire-deployment |
| 用户在初始化后要求查看日志/跟踪记录 | → aspire-monitoring |
| 检测到现有 AppHost — 不要运行 init | → aspireify(重新连接)或 aspire-orchestration(生命周期管理) |
项目本地技能覆盖
如果项目本地存在 .agents/skills/aspire-init/SKILL.md(由较早版本的 aspire init 安装),请提醒用户并遵循该文件。旧版项目本地技能可能包含特定于仓库的指南,不应被此插件内技能覆盖。
出于相同原因,项目本地的 aspireify 技能(由 aspire init 安装)优先于此插件内的 aspireify;请遵循项目本地副本并提醒用户。
错误处理
| 症状 | 原因 | 操作 |
|---|---|---|
aspire init 报告 AppHost 已存在 | 仓库中已有 AppHost | 停止。转交给 aspireify(重新接线)或 aspire-orchestration(生命周期管理) |
在非交互模式下,aspire init 未提供 --language 时失败 | 有多种语言路径可用 | 使用 --language csharp 或 --language typescript 重新运行 |
aspire new 拒绝 --output 路径 | 路径已存在且非空 | 使用其他 --output,或清空该目录 |
找不到 aspire 命令 | 未安装 CLI | 安装 .NET 10 时运行 dotnet tool install -g Aspire.Cli,或运行 curl -sSL https://aspire.dev/install.sh | bash |
aspire doctor 报告缺少 .NET 10 | 缺少 SDK | 重试前安装 .NET 10 SDK |
aspire init 已成功,但未安装 aspireify 技能 | 未检测到 Agent 技能目录,或未选择 aspireify(13.5 不会预选该技能) | 运行 aspire agent init --non-interactive --skills aspireify(将 aspireify 附加到任何显式的 --skills 列表中,保留所有 --skill-locations,且不要添加 --mcp),然后继续接线 |
aspire init 已成功,但未写入 MCP 配置 | 13.6+ 中的预期行为——串联的 Agent 设置不会提供 MCP | 不要修复。仅在用户明确提出要求时配置 MCP(13.6+ 上运行 aspire agent init --mcp) |
| 已生成骨架,但资源未接线 | 这是预期行为——aspire init 不负责接线 | 转交给 aspireify |
现有 TypeScript AppHost 仍使用 apphost.ts | 旧版入口点和包依赖图 | 转交给负责审批和 aspire update --migrate --yes --non-interactive 的 aspire-orchestration;仅在后续源代码编写时再交回 aspireify |
参考资料
- templates.md —
aspire new模板和选项 - init-workflow.md —
aspire init流程、aspire.config.json布局及aspireify交接 - aspire-13-5-breaking-changes.md — 13.5 迁移、CLI-bundle 行为,以及受影响版本的修复