Frameworks CLI para C# (.NET): creación de aplicaciones de consola

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): creación de aplicaciones de consola profesionales



El desarrollo moderno en C# (.NET) no se limita a aplicaciones web y programas de escritorio. Las aplicaciones de consola (CLI) siguen siendo demandadas para automatización, herramientas DevOps, utilidades de administración y scripts internos. Sin embargo, el análisis manual de argumentos de línea de comandos es una tarea tediosa y propensa a errores. Aquí es donde entran en juego los frameworks CLI especializados, que se encargan del análisis de argumentos, generación de ayuda, validación e incluso salida a color.



En este artículo, analizaremos tres soluciones open source más populares para crear CLI en C# (.NET): System.CommandLine (paquete oficial de Microsoft), Spectre.Console y Cocona. Conocerá sus capacidades clave, verá ejemplos de código y podrá elegir la herramienta adecuada para su proyecto.



1. System.CommandLine (Microsoft)



System.CommandLine es la biblioteca oficial de Microsoft, diseñada para crear aplicaciones de consola modernas con soporte completo para análisis de argumentos, validación, autocompletado y generación de ayuda. Se utiliza activamente en el SDK de .NET y otras herramientas de Microsoft.



Características principales:

  • Definición declarativa de comandos, opciones y argumentos.
  • Generación automática de ayuda (--help).
  • Soporte para middleware para manejo de errores y registro.
  • Validación integrada de tipos y valores.
  • Posibilidad de integración con Dependency Injection.


Ejemplo de código:

using System.CommandLine;

var rootCommand = new RootCommand("Calculadora CLI simple");

var argA = new Argument<int>("a", "Primer número");var argB = new Argument<int>("b", "Segundo número");var optMultiply = new Option<bool>("--multiply", "Multiplicar en lugar de sumar");

rootCommand.AddArgument(argA);rootCommand.AddArgument(argB);rootCommand.AddOption(optMultiply);

rootCommand.SetHandler((int a, int b, bool multiply) =>{ int result = multiply ? a * b : a + b; Console.WriteLine($"Resultado: {result}");}, argA, argB, optMultiply);

await rootCommand.InvokeAsync(args);


Ejecución: dotnet run -- 5 3 --multiply mostrará Resultado: 15.



2. Spectre.Console



Spectre.Console no es solo un framework CLI, sino todo un ecosistema para crear aplicaciones de consola atractivas e interactivas. Incluye análisis de argumentos (a través del paquete Spectre.Console.Cli), salida a color, tablas, barras de progreso, calendarios e incluso animaciones.



Características principales:

  • Definición declarativa de comandos con atributos.
  • Generación automática de ayuda con formato de color.
  • Soporte integrado para DI y validación.
  • Amplio conjunto de widgets: tablas, árboles, paneles, calendarios.
  • Solicitudes interactivas (selección de lista, confirmación, entrada de texto).


Ejemplo de código (comando con atributos):

using Spectre.Console;using Spectre.Console.Cli;

public class GreetCommand : Command<GreetSettings>{ public override int Execute(CommandContext context, GreetSettings settings) { AnsiConsole.MarkupLine($"[bold green]¡Hola, {settings.Name}![/]"); if (settings.Repeat > 1) { AnsiConsole.MarkupLine($"[yellow]Repetido {settings.Repeat} vez(ces)[/]"); } return 0; }}

public class GreetSettings : CommandSettings{ [CommandArgument(0, "[Name]")] public string Name { get; set; } = "Mundo";

[CommandOption("-r|--repeat <N>")] public int Repeat { get; set; } = 1;}

// En Program.csvar app = new CommandApp<GreetCommand>();app.Run(args);


Sol

Recommendations