Frameworks CLI para C# (.NET): System.CommandLine y Cocona

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Frameworks CLI para C# (.NET): System.CommandLine y Cocona



La creación de aplicaciones de consola (CLI) en C# durante mucho tiempo ha estado asociada con el análisis manual de argumentos de línea de comandos a través de string[] args y engorrosas construcciones condicionales. Sin embargo, con el desarrollo del ecosistema .NET, han surgido frameworks especializados que se encargan de las tareas rutinarias: análisis de argumentos, generación de ayuda, validación e incluso inyección de dependencias (DI). En este artículo, analizaremos los dos enfoques más populares: el oficial System.CommandLine de Microsoft y el ligero pero potente Cocona.



Ambas herramientas permiten escribir código limpio y declarativo que es fácil de mantener y probar. Aprenderá cómo agregarlas rápidamente a su proyecto, definir comandos y argumentos, y verá ejemplos de código reales.



1. System.CommandLine



System.CommandLine es la biblioteca oficial de Microsoft, que forma parte del SDK de .NET (a partir de .NET 6). Proporciona un conjunto completo de funciones para construir aplicaciones CLI complejas: comandos anidados, autocompletado con Tab, validación, controladores asíncronos y generación de ayuda.



Instalación

Agregue el paquete a través de NuGet:

dotnet add package System.CommandLine --version 2.0.0-beta4.22272.1


Ejemplo: calculadora con dos operaciones

Creemos una aplicación simple que acepte el comando add o multiply con dos números:

using System.CommandLine;

// Definimos el comando raízvar rootCommand = new RootCommand("Calculadora simple");

// Creamos el subcomando "add"var addCommand = new Command("add", "Suma de dos números");var addXOption = new Option<int>("--x", "Primer número") { IsRequired = true };var addYOption = new Option<int>("--y", "Segundo número") { IsRequired = true };addCommand.AddOption(addXOption);addCommand.AddOption(addYOption);

addCommand.SetHandler((x, y) =>{ Console.WriteLine($"Resultado de la suma: {x + y}");}, addXOption, addYOption);

// Creamos el subcomando "multiply"var multiplyCommand = new Command("multiply", "Multiplicación de dos números");var multXOption = new Option<int>("--x", "Primer número") { IsRequired = true };var multYOption = new Option<int>("--y", "Segundo número") { IsRequired = true };multiplyCommand.AddOption(multXOption);multiplyCommand.AddOption(multYOption);

multiplyCommand.SetHandler((x, y) =>{ Console.WriteLine($"Resultado de la multiplicación: {x * y}");}, multXOption, multYOption);

// Agregamos los comandos a la raízrootCommand.AddCommand(addCommand);rootCommand.AddCommand(multiplyCommand);

// Ejecutamosawait rootCommand.InvokeAsync(args);


Ejecución de la aplicación:

dotnet run -- add --x 5 --y 3# Salida: Resultado de la suma: 8

dotnet run -- multiply --x 4 --y 7# Salida: Resultado de la multiplicación: 28


Características clave de System.CommandLine

  • Autocompletado — soporte integrado para finalización con Tab en bash y PowerShell.
  • Generación de ayuda — la bandera --help genera automáticamente una descripción de todos los comandos y opciones.
  • Validación — se pueden definir parámetros obligatorios, rangos de valores y comprobaciones personalizadas.
  • Asincronía — los controladores admiten async Task.
  • Pruebas — fácil de escribir pruebas unitarias con TestConsole.


2. Cocona



Cocona es un framework alternativo que ofrece una sintaxis más concisa gracias a los atributos y la vinculación automática de parámetros. Es ideal para proyectos pequeños y medianos donde la velocidad de desarrollo es importante. Cocona admite DI, middleware y comandos anidados.



Instalación

dotnet add package Co                    

Recommendations