Framework CLI para C# (.NET): System.CommandLine y Spectre.Console

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

CLI framework para C# (.NET): System.CommandLine y Spectre.Console



Crear aplicaciones de consola (CLI) de calidad en C# es una tarea que requiere no solo procesar argumentos de línea de comandos, sino también una presentación conveniente de datos, soporte para subcomandos, validación e interactividad. En el ecosistema .NET existen dos herramientas potentes para esto: el oficial System.CommandLine de Microsoft y la biblioteca universal Spectre.Console. En este artículo analizaremos en detalle sus capacidades, mostraremos ejemplos de uso y compararemos sus enfoques.



1. System.CommandLine: el analizador oficial de Microsoft



System.CommandLine es una biblioteca de código abierto que proporciona una forma declarativa de definir comandos, argumentos, opciones y manejadores. Forma parte del .NET SDK (desde .NET 6) y está disponible como paquete NuGet.



Características principales

  • Descripción declarativa de la estructura de comandos mediante atributos o fluent API.
  • Generación automática de ayuda (--help).
  • Soporte para comandos anidados (subcomandos) y alias.
  • Validación de argumentos y opciones (tipos, rangos, obligatoriedad).
  • Integración con contenedores DI y middleware.


Ejemplo: aplicación simple con dos comandos

Crearemos una aplicación de consola que soporte los comandos greet y calc.



using System.CommandLine;

var rootCommand = new RootCommand("Aplicación CLI multifuncional");

// Comando greetvar greetCommand = new Command("greet", "Saludar al usuario");var nameOption = new Option<string>( "--name", () => "mundo", "Nombre para el saludo");greetCommand.AddOption(nameOption);

greetCommand.SetHandler((string name) =>{ Console.WriteLine($"¡Hola, {name}!");}, nameOption);

// Comando calcvar calcCommand = new Command("calc", "Calculadora simple");var aArgument = new Argument<int>("a", "Primer número");var bArgument = new Argument<int>("b", "Segundo número");var operationOption = new Option<string>( "--operation", () => "add", "Operación: add, sub, mul, div");calcCommand.AddArgument(aArgument);calcCommand.AddArgument(bArgument);calcCommand.AddOption(operationOption);

calcCommand.SetHandler((int a, int b, string op) =>{ var result = op switch { "add" => a + b, "sub" => a - b, "mul" => a * b, "div" => b != 0 ? a / b : throw new DivideByZeroException(), _ => throw new ArgumentException("Operación desconocida") }; Console.WriteLine($"Resultado: {result}");}, aArgument, bArgument, operationOption);

rootCommand.AddCommand(greetCommand);rootCommand.AddCommand(calcCommand);

return await rootCommand.InvokeAsync(args);


Ejecución de la aplicación:

dotnet run -- greet --name "PythonLib"dotnet run -- calc 10 5 --operation mul


2. Spectre.Console: belleza e interactividad



Spectre.Console es una biblioteca para crear interfaces de consola atractivas. No reemplaza al analizador de argumentos, pero lo complementa perfectamente: salida en color, tablas, barras de progreso, menús interactivos e incluso dibujo en la consola.



Características principales

  • Salida en color y formateada con soporte para Markdown.
  • Tablas, diagramas, calendarios.
  • Componentes interactivos: selección de lista, entrada de texto, confirmación.
  • Animación (spinners, barras de progreso).
  • Dibujo de bordes, paneles y columnas.


Ejemplo: menú interactivo y tabla

Mostraremos cómo crear un menú de selección y mostrar datos en forma de tabla.



using Spectre.Console;

// Menú interactivovar choice = AnsiConsole.Prompt( new SelectionProm

Recommendations