Frameworks CLI para C# (.NET): System.CommandLine e Cocona

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): 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.1


Exemplo: 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: 28


Principais funcionalidades do System.CommandLine

  • Autocompletar — suporte nativo para conclusão com Tab no bash e PowerShell.
  • Geração de ajuda — a flag --help gera 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                    

Recommendations