Frameworks CLI para C# (.NET): criação de aplicações de console

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations