Frameworks CLI para C# (.NET): criação de aplicações de console profissionais
O desenvolvimento moderno em C# (.NET) não se limita a aplicações web e programas desktop. As aplicações de console (CLI) continuam sendo requisitadas para automação, ferramentas DevOps, utilitários de administração e scripts internos. No entanto, a análise manual de argumentos de linha de comando é uma tarefa tediosa e propensa a erros. É aí que entram os frameworks CLI especializados, que assumem a interpretação de argumentos, geração de ajuda, validação e até mesmo saída colorida.
Neste artigo, vamos explorar três soluções open-source mais populares para criar CLI em C# (.NET): System.CommandLine (pacote oficial da Microsoft), Spectre.Console e Cocona. Você conhecerá seus principais recursos, verá exemplos de código e poderá escolher a ferramenta adequada para o seu projeto.
1. System.CommandLine (Microsoft)
System.CommandLine é a biblioteca oficial da Microsoft, projetada para criar aplicações de console modernas com suporte robusto para análise de argumentos, validação, preenchimento automático e geração de ajuda. Ela é ativamente usada no .NET SDK e em outras ferramentas da Microsoft.
Principais recursos:
- Definição declarativa de comandos, opções e argumentos.
- Geração automática de ajuda (--help).
- Suporte a middleware para tratamento de erros e logging.
- Validação integrada de tipos e valores.
- Possibilidade de integração com Dependency Injection.
Exemplo de código:
using System.CommandLine;
var rootCommand = new RootCommand("Calculadora CLI simples");
var argA = new Argument<int>("a", "Primeiro número");var argB = new Argument<int>("b", "Segundo número");var optMultiply = new Option<bool>("--multiply", "Multiplicar em vez de somar");
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);Execução: dotnet run -- 5 3 --multiply exibirá Resultado: 15.
2. Spectre.Console
Spectre.Console não é apenas um framework CLI, mas todo um ecossistema para criar aplicações de console bonitas e interativas. Ele inclui análise de argumentos (através do pacote Spectre.Console.Cli), saída colorida, tabelas, barras de progresso, calendários e até animação.
Principais recursos:
- Definição declarativa de comandos com atributos.
- Geração automática de ajuda com formatação colorida.
- Suporte integrado a DI e validação.
- Conjunto rico de widgets: tabelas, árvores, painéis, calendários.
- Solicitações interativas (seleção de lista, confirmação, entrada de texto).
Exemplo de código (comando com 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]Olá, {settings.Name}![/]"); if (settings.Repeat > 1) { AnsiConsole.MarkupLine($"[yellow]Repetido {settings.Repeat} vez(es)[/]"); } 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;}
// Em Program.csvar app = new CommandApp<GreetCommand>();app.Run(args);Sol