Skip to main content

add-cli-command

Add or change a dotnet CLI command, subcommand, or option across the relevant CLI projects. USE FOR: adding or changing a dotnet CLI command/subcommand, adding a new Option<T> or Argument<T>, registering a subcommand in the command tree, changing an option's help description or a command's runtime message, wiring a command parser, or updating --help output.

Datos de origen

Repositorio
dotnet/sdk
Última actividad en el origen
9 de julio de 2026 a las 15:24
Idioma detectado de SKILL.md
inglés
Estrellas
3227
Forks
1300

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Explorador de archivos
2 archivos

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
add-cli-command
description
Add or change a dotnet CLI command, subcommand, or option across the relevant CLI projects. USE FOR: adding or changing a dotnet CLI command/subcommand, adding a new Option<T> or Argument<T>, registering a subcommand in the command tree, changing an option's help description or a command's runtime message, wiring a command parser, or updating --help output.
license
MIT
# Add or change a dotnet CLI command or option See [`references/file-map.md`](references/file-map.md) for the exact file map and the two-resx reference table. Read it before editing. ## Add an option to an existing command 1. **Declare** the option in `src/Cli/Microsoft.DotNet.Cli.Definitions/Commands/<Area>/<Name>CommandDefinition.cs`. Prefer a `CommonOptions` factory (`Common/CommonOptions.cs`) when one exists: ```csharp public readonly Option<bool> NoLogoOption = CommonOptions.CreateNoLogoOption(); // or, declared inline: public readonly Option<string> OutputOption = new Option<string>("--output", "-o") { Description = CommandDefinitionStrings.BuildOutputOptionDescription }; ``` Add it to the command in the constructor: `Options.Add(OutputOption);`. 2. **Consume** it in the managed implementation under `src/Cli/dotnet/Commands/<Area>/...` via `definition.OutputOption`; runtime messages come from `CliCommandStrings.<Key>`. 3. **Strings**: add the help description to `CommandDefinitionStrings.resx` and any runtime message to `CliCommandStrings.resx`, then regenerate the `.xlf` siblings. 4. **Test**: add parser/validation tests under `test/dotnet.Tests/CommandTests/<Area>/` and update any Verify help snapshots. ## Add a new command Everything above, plus: 1. Create `Commands/<Area>/<Name>CommandDefinition.cs` in the Definitions project. 2. Register it in the root tree (`Commands/DotNetCommandDefinition.cs` constructor): ```csharp Subcommands.Add(<Name>Command = new()); ``` 3. Create the managed implementation and a `<Name>CommandParser.cs` exposing `ConfigureCommand(...)` under `src/Cli/dotnet/Commands/<Name>/`. 4. Wire the parser in `src/Cli/dotnet/Parser.cs` `ConfigureManagedActions`: ```csharp <Name>CommandParser.ConfigureCommand(rootCommand.<Name>Command); ``` > **Native AOT:** a newly registered command already *runs* under Native AOT via the > managed fallback (the `dotnet-aot` host runs `dotnet.dll` through hostfxr), and its > parsing and `--help` reach the AOT CLI for free. Making the command execute > **in-process** in the native binary is separate, deliberate work — follow the > **add-dotnet-aot-command** skill when AOT support is required. ## Checklist - [ ] Option/command declared in `Definitions`, registered in its parent's constructor. - [ ] Managed behavior wired in `src/Cli/dotnet` and (for new commands) in `Parser.cs`. - [ ] Help description in `CommandDefinitionStrings.resx`; runtime message in `CliCommandStrings.resx`. - [ ] `.xlf` files regenerated via `/t:UpdateXlf` (not hand-edited), resx + xlf committed together. - [ ] No heavy dependency leaked into `Definitions`. - [ ] For in-process AOT execution, followed **add-dotnet-aot-command** (managed fallback applies otherwise). - [ ] Tests added/updated; Verify `*.verified.txt` snapshots promoted if CLI output changed.
Ver en GitHub