CLI фреймворки для C# (.NET): создание консольных приложений

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

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 идеально подходит для небольших утилит и скри

Рекомендаций