Frameworks CLI para C# (.NET): System.CommandLine e Cocona
Criar aplicações de console (CLI) em C# por muito tempo esteve associado à análise manual de argumentos de linha de comando via string[] args e construções condicionais complexas. No entanto, com o desenvolvimento do ecossistema .NET, surgiram frameworks especializados que assumem as tarefas rotineiras: análise de argumentos, geração de ajuda, validação e até injeção de dependências (DI). Neste artigo, veremos duas abordagens mais populares: o oficial System.CommandLine da Microsoft e o leve, mas poderoso, Cocona.
Ambas as ferramentas permitem escrever código limpo e declarativo, fácil de manter e testar. Você aprenderá como conectá-las rapidamente ao seu projeto, definir comandos e argumentos, e verá exemplos reais de código.
1. System.CommandLine
System.CommandLine é uma biblioteca oficial da Microsoft, incluída no .NET SDK (a partir do .NET 6). Ela oferece um conjunto completo de funcionalidades para construir aplicações CLI complexas: comandos aninhados, autocompletar com Tab, validação, manipuladores assíncronos e geração de ajuda.
Instalação
Adicione o pacote via NuGet:
dotnet add package System.CommandLine --version 2.0.0-beta4.22272.1Exemplo: calculadora com duas operações
Vamos criar uma aplicação simples que aceita o comando add ou multiply com dois números:
using System.CommandLine;
// Define o comando raizvar rootCommand = new RootCommand("Calculadora Simples");
// Cria o subcomando "add"var addCommand = new Command("add", "Soma de dois números");var addXOption = new Option<int>("--x", "Primeiro 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 da soma: {x + y}");}, addXOption, addYOption);
// Cria o subcomando "multiply"var multiplyCommand = new Command("multiply", "Multiplicação de dois números");var multXOption = new Option<int>("--x", "Primeiro 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 da multiplicação: {x * y}");}, multXOption, multYOption);
// Adiciona os comandos à raizrootCommand.AddCommand(addCommand);rootCommand.AddCommand(multiplyCommand);
// Executaawait rootCommand.InvokeAsync(args);Executando a aplicação:
dotnet run -- add --x 5 --y 3# Saída: Resultado da soma: 8
dotnet run -- multiply --x 4 --y 7# Saída: Resultado da multiplicação: 28Principais funcionalidades do System.CommandLine
- Autocompletar — suporte nativo para conclusão com Tab no bash e PowerShell.
- Geração de ajuda — a flag
--helpgera automaticamente a descrição de todos os comandos e opções. - Validação — é possível definir parâmetros obrigatórios, intervalos de valores e verificações personalizadas.
- Assincronicidade — os manipuladores suportam
async Task. - Testes — fácil escrever testes de unidade com
TestConsole.
2. Cocona
Cocona é um framework alternativo que oferece uma sintaxe mais concisa graças a atributos e vinculação automática de parâmetros. É ideal para projetos pequenos e médios onde a velocidade de desenvolvimento é importante. Cocona suporta DI, middleware e comandos aninhados.
Instalação
dotnet add package Co Também na biblioteca
Geração de relatórios PDF em Java com iText e Apache PDFBox
Filas de Tarefas em Swift: GCD, OperationQueue e Swift Concurrency
Filas de Tarefas para Kotlin: Coroutines e KJobQueue
Internacionalização (i18n) em Node.js: i18next e polyglot