关于 template-smart-defaults
此 Skill 帮助 Agent 规划 `dotnet new` 项目时,为未指定的相关参数补充一致默认值。它保留用户明确选择,并要求输出默认值记录和准确命令。
主要功能
- 01补充相关的未设参数
- 02保留用户明确选择
- 03说明默认值的依据
- 04输出默认值记录和命令
适用场景
- 01规划选项未指定的项目
- 02根据已选参数确定关联值
- 03准备安全的建议命令
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dotnet/ skills --skill template-smart-defaults安装后在 Claude Code 中输入/template-smart-defaults确认已加载。
详细介绍
模板智能默认值
此技能可帮助 Agent 在创建 dotnet new 项目时补全跨参数默认值。以下规则是用于保持相关参数一致的指导性启发式规则——它们只补全缺失项,不会覆盖用户明确设置的值。
适用场景
- 用户要求创建项目,但未指定相关参数
- 用户选择的某个参数意味着另一个参数应采用合理的值
- 需要解释为何选择了某个特定默认值
不适用场景
- 用户想要实际创建项目——转到
template-instantiation - 用户想要查找或比较模板——转到
template-discovery或template-comparison - 用户想要编写或验证自定义模板——转到
template-authoring或template-validation
输入
| 输入 | 必填 | 说明 |
|---|---|---|
| 模板简称 | 是 | 将用于创建项目的模板(例如,webapi) |
| 已选择的参数 | 是 | 用户已明确设置的参数值 |
| 可用选项 | 推荐 | dotnet new <template> --help 提供的参数名和选项 |
工作流
- 收集用户已明确设置的参数。
- 仅在相应参数尚未设置时应用以下规则——绝不覆盖用户明确设置的值。
- 只要用户要求提供精确命令,就根据
dotnet new <template> --help确认所选参数名和选项。此项检查不会创建文件;即使只是提供建议,也值得进行。只有在概念性说明不涉及精确选项名时,才可跳过。 - 输出两个必需结果(见下文)——这正是该技能能发挥决定性作用而非形同虚设的关键。
对于要求“不要创建文件”的仅提供建议类提示,在显示的命令末尾追加 --dry-run,确保命令可以安全运行。如果某个场景需要使用命名示例,而用户未提供名称,请选择简短且能描述用途的示例名称,并将其标记为 Source = rule。如果用户要求的命令只能包含明确指定的选项,或者模板无需名称即可安全演示这些选项,则不要添加名称。
必需输出
始终按以下顺序输出两项:
A.「已应用的默认值」日志——每个参数占一行,既包含你保留的显式值(Source = user),也包含你按规则填补的缺省值(Source = rule),以便用户查看并调整每项选择:
| Parameter | Value | Source | Why |
|---|---|---|---|
--framework | net10.0 | rule | Native AOT(来自 --aot)需要最新的、支持 AOT 的 TFM |
--auth | Individual | user | 用户明确要求——保持不变 |
--name | AotWorker | rule | 为这个命名示例添加描述性名称 |
显式值使用 Source = user(绝不覆盖),按规则填补缺省值使用 Source = rule。
B. 要运行的唯一一条、完整的 dotnet new 命令行——只包含实际传入的标志。不要列出你决定不传入的标志(例如,保留 HTTPS 时不要提及 --no-https;使用控制器时不要提及 minimal-API 标志)。不提及省略的标志,正是明确无误的信号。
如果用户明确要求了某个标志,且实际查看到的模板帮助中提供了该标志,则始终输出该标志,即使其值与模板默认值相同;这样可以明确展示用户意图,并确保结果可复现(例如 --auth None)。只有未实际传入的推断默认值才省略。像 --no-https 这样的布尔开关直接传入,不带 true。
创建时启用 AOT 与发布时启用 AOT。
--aot仅是提供该选项的模板上的dotnet new标志——务必查看dotnet new <template> --help进行确认,不要假设某个模板提供或不提供该选项。模板没有--publish-aot标志——发布时的 Native AOT 通过 MSBuild 属性PublishAot=true启用(通过dotnet publish或在.csproj中设置),而不是通过dotnet new启用。只有当模板确实提供--aot时,才应用框架规则。
规则
| Rule | Default applied | Rationale |
|---|---|---|
已设置 --aot(仅限 --help 提供该选项的模板),且未设置 --framework | 将 --framework 设为模板提供的最新 AOT 兼容框架 | Native AOT 需要近期推出且支持 AOT 的目标框架;使用最新版本可避免构建失败。(工作区或 global.json 已固定的框架也视为已设置——除非与 AOT 不兼容,否则保留。) |
--auth 不为 None | 不要传入 --no-https | 身份验证流程(Cookie、令牌、重定向)需要 HTTPS;禁用它会导致身份验证失效。 |
已设置 --use-controllers | 不要同时传入 minimal-API 标志 | 控制器与 minimal API 是互斥的程序模型;同时传入会造成矛盾。 |
| 用户已明确设置某个值 | 保持不变 | 智能默认值只填补缺省项;始终以用户明确意图为准。 |
| 仅提供建议的命令不得创建文件 | 添加 --dry-run | 命令本身必须遵守不写入文件的约束,不能只依赖 Agent 的行为。 |
用户明确要求使用控制器时,命令必须包含 --help 中显示的控制器选项;只说明使用控制器,却不传入该选项,并不完整。
验证
- 已生成「已应用的默认值」日志,每行均包含 Source(user/rule)和理由
- 已输出唯一一条完整的
dotnet new命令行,且仅列出实际传入的标志 - 未覆盖用户明确设置的任何参数
- 仅填补了未设置的参数
- 已根据
dotnet new <template> --help确认准确的参数名称和可选值,包括仅提供建议的准确命令 - 不创建文件的建议命令包含
--dry-run - 布尔开关未在末尾带上
true
常见问题
| 问题 | 解决方案 |
|---|---|
| 将启发式规则当作强制规则 | 这些是指导规则,而非验证规则。务必根据 dotnet new <template> --help 中的选项进行确认,因为参数名称因模板而异。 |
| 覆盖用户明确指定的值 | 仅在目标参数未设置时应用规则。 |
| 假定标志名称 | 标志名称因模板而异——务必通过 --help 确认(例如,只有在 --help 列出 --aot 时才有此标志;控制器使用 --use-controllers)。 |
| 选择模板不支持的框架 | 使用模板的 --framework 选项中列出的最新框架,而不是随意选择最新版本。 |
| 在“不要创建文件”后仍显示普通创建命令 | 添加 --dry-run,确保所显示的命令可以安全执行。 |
更多信息
- dotnet new — CLI 参考
- Native AOT deployment — AOT 框架要求