CLI фреймворки для C# (.NET): создание профессиональных консольных приложений
Современная разработка на C# (.NET) не ограничивается веб-приложениями и десктопными программами. Консольные приложения (CLI) остаются востребованными для автоматизации, DevOps-инструментов, утилит администрирования и внутренних скриптов. Однако ручной парсинг аргументов командной строки — утомительная и подверженная ошибкам задача. На помощь приходят специализированные CLI-фреймворки, которые берут на себя разбор аргументов, генерацию справки, валидацию и даже цветной вывод.
В этой статье мы рассмотрим три наиболее популярных open-source решения для создания CLI на C# (.NET): System.CommandLine (официальный пакет от Microsoft), Spectre.Console и Cocona. Вы узнаете их ключевые возможности, увидите примеры кода и сможете выбрать подходящий инструмент для своего проекта.
1. System.CommandLine (Microsoft)
System.CommandLine — это официальная библиотека от Microsoft, предназначенная для создания современных консольных приложений с богатой поддержкой парсинга аргументов, валидации, автодополнения и генерации справки. Она активно используется в .NET SDK и других инструментах Microsoft.
Основные возможности:
- Декларативное определение команд, опций и аргументов.
- Автоматическая генерация справки (--help).
- Поддержка middleware для обработки ошибок и логирования.
- Встроенная валидация типов и значений.
- Возможность интеграции с Dependency Injection.
Пример кода:
using System.CommandLine;
var rootCommand = new RootCommand("Простой CLI калькулятор");
var argA = new Argument<int>("a", "Первое число");
var argB = new Argument<int>("b", "Второе число");
var optMultiply = new Option<bool>("--multiply", "Умножать вместо сложения");
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($"Результат: {result}");
}, argA, argB, optMultiply);
await rootCommand.InvokeAsync(args);
Запуск: dotnet run -- 5 3 --multiply выведет Результат: 15.
2. Spectre.Console
Spectre.Console — это не просто CLI-фреймворк, а целая экосистема для создания красивых и интерактивных консольных приложений. Она включает в себя парсинг аргументов (через пакет Spectre.Console.Cli), цветной вывод, таблицы, прогресс-бары, календари и даже анимацию.
Основные возможности:
- Декларативное определение команд с атрибутами.
- Автоматическая генерация справки с цветовым оформлением.
- Встроенная поддержка DI и валидации.
- Богатый набор виджетов: таблицы, деревья, панели, календари.
- Интерактивные запросы (выбор из списка, подтверждение, ввод текста).
Пример кода (команда с атрибутами):
using Spectre.Console;
using Spectre.Console.Cli;
public class GreetCommand : Command<GreetSettings>
{
public override int Execute(CommandContext context, GreetSettings settings)
{
AnsiConsole.MarkupLine($"[bold green]Привет, {settings.Name}![/]");
if (settings.Repeat > 1)
{
AnsiConsole.MarkupLine($"[yellow]Повторено {settings.Repeat} раз(а)[/]");
}
return 0;
}
}
public class GreetSettings : CommandSettings
{
[CommandArgument(0, "[Name]")]
public string Name { get; set; } = "Мир";
[CommandOption("-r|--repeat <N>")]
public int Repeat { get; set; } = 1;
}
// В Program.cs
var app = new CommandApp<GreetCommand>();
app.Run(args);
Запуск: dotnet run -- --name PythonLib -r 3 выведет зелёное приветствие с указанием количества повторов.
3. Cocona
Cocona — это минималистичный и производительный CLI-фреймворк, вдохновлённый Python-библиотекой Click. Он использует атрибуты и поддерживает как синхронные, так и асинхронные методы. Cocona идеально подходит для небольших утилит и скри