SolimusWrapper 1.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package SolimusWrapper --version 1.0.1
                    
NuGet\Install-Package SolimusWrapper -Version 1.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SolimusWrapper" Version="1.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SolimusWrapper" Version="1.0.1" />
                    
Directory.Packages.props
<PackageReference Include="SolimusWrapper" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SolimusWrapper --version 1.0.1
                    
#r "nuget: SolimusWrapper, 1.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SolimusWrapper@1.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SolimusWrapper&version=1.0.1
                    
Install as a Cake Addin
#tool nuget:?package=SolimusWrapper&version=1.0.1
                    
Install as a Cake Tool

SolimusWrapper

Лёгкая и оптимизированная библиотека для работы с CLI процессами в .NET.

NuGet Downloads License

✨ Особенности

  • 🚀 Fluent API — читаемый и удобный синтаксис
  • 🔒 Immutable — потокобезопасные команды
  • ⚡ Async/Await — полная асинхронность с CancellationToken
  • 🔄 Pipes — перенаправление stdout, stderr, stdin
  • ⏱️ Таймауты — автоматическое завершение процессов
  • 🌍 Кросс-платформенность — Windows, Linux, macOS
  • 📦 Zero Dependencies — никаких внешних зависимостей
  • 🎯 Native AOT — поддержка trimming

📦 Установка

dotnet add package SolimusWrapper

🚀 Быстрый старт

using SolimusWrapper;

// Простой запуск
var result = await Command.Run("dotnet")
    .WithArguments("--version")
    .ExecuteAsync();

// Получить вывод
var output = await Command.Run("git")
    .WithArguments("status")
    .ExecuteAndReadOutputAsync();

📖 Примеры использования

Базовые операции

// Запуск с аргументами
await Command.Run("dotnet")
    .WithArguments("build", "-c", "Release")
    .ExecuteAsync();

// Получить stdout и stderr
var (stdOut, stdErr) = await Command.Run("dotnet")
    .WithArguments("build")
    .ExecuteAndReadAllAsync();

Вывод в реальном времени

await Command.Run("dotnet")
    .WithArguments("test")
    .WithStandardOutputPipe(PipeTarget.ToDelegate(Console.WriteLine))
    .WithStandardErrorPipe(PipeTarget.ToDelegate(line => 
        Console.WriteLine($"[ERR] {line}")))
    .ExecuteAsync();

Перенаправление в файл

await Command.Run("dotnet")
    .WithArguments("build", "-v", "detailed")
    .WithStandardOutputPipe(PipeTarget.ToFile("build.log"))
    .ExecuteAsync();

Передача данных в stdin

await Command.Run("grep")
    .WithArguments("error")
    .WithStandardInputPipe(PipeSource.FromString("line1\nerror here\nline3"))
    .ExecuteAsync();

// Из файла
await Command.Run("cat")
    .WithStandardInputPipe(PipeSource.FromFile("input.txt"))
    .ExecuteAsync();

Рабочая директория и переменные окружения

await Command.Run("npm")
    .WithArguments("install")
    .WithWorkingDirectory("/path/to/project")
    .WithEnvironmentVariable("NODE_ENV", "production")
    .ExecuteAsync();

Таймауты и отмена

// Таймаут
try
{
    await Command.Run("long-process")
        .WithTimeout(TimeSpan.FromSeconds(30))
        .ExecuteAsync();
}
catch (TimeoutException)
{
    Console.WriteLine("Процесс превысил лимит времени");
}

// Отмена
using var cts = new CancellationTokenSource();
await Command.Run("task").ExecuteAsync(cts.Token);

Обработка кодов выхода

// Исключение при ошибке (по умолчанию)
try
{
    await Command.Run("failing-command").ExecuteAsync();
}
catch (CommandExecutionException ex)
{
    Console.WriteLine($"Exit code: {ex.ExitCode}");
}

// Без исключения
var result = await Command.Run("might-fail")
    .WithValidation(false)
    .ExecuteAsync();

if (!result.IsSuccess)
    Console.WriteLine($"Failed with code: {result.ExitCode}");

CommandBuilder для условной логики

using SolimusWrapper.Builders;

var result = await new CommandBuilder("dotnet")
    .AddArgument("publish")
    .AddFlag("-v", verbose)
    .AddArgumentIfNotEmpty("-c", configuration)
    .AddArgumentIf(OperatingSystem.IsLinux(), "-r", "linux-x64")
    .SetTimeout(TimeSpan.FromMinutes(10))
    .ExecuteAsync();

Кросс-платформенные хелперы

// Shell (cmd на Windows, sh на Unix)
await CommandExtensions.Shell("echo Hello").ExecuteAsync();

// Список файлов
var files = await CommandExtensions.ListFiles().ExecuteAndReadOutputAsync();

// Ping
await CommandExtensions.Ping("google.com", 4)
    .WithStandardOutputPipe(PipeTarget.ToDelegate(Console.WriteLine))
    .ExecuteAsync();

📊 API Reference

Command

Метод Описание
Run(string) Создаёт команду
WithArguments(...) Устанавливает аргументы
WithWorkingDirectory(string) Рабочая директория
WithEnvironmentVariable(string, string?) Переменная окружения
WithStandardOutputPipe(PipeTarget) Перенаправление stdout
WithStandardErrorPipe(PipeTarget) Перенаправление stderr
WithStandardInputPipe(PipeSource) Источник stdin
WithEncoding(Encoding) Кодировка
WithValidation(bool) Проверка exit code
WithTimeout(TimeSpan) Таймаут
ExecuteAsync() Выполнить команду
ExecuteAndReadOutputAsync() Выполнить и получить stdout
ExecuteAndReadAllAsync() Выполнить и получить stdout + stderr

PipeTarget

Метод Описание
Null Отбрасывает вывод
ToStringBuilder(sb) В StringBuilder
ToDelegate(action) Построчный callback
ToStream(stream) В поток
ToFile(path) В файл

PipeSource

Метод Описание
Null Пустой ввод
FromString(text) Из строки
FromStream(stream) Из потока
FromFile(path) Из файла
FromBytes(data) Из байтов

CommandResult

Свойство Описание
ExitCode Код выхода
IsSuccess true если ExitCode == 0
StartTime Время запуска
ExitTime Время завершения
RunTime Длительность

🔧 Требования

  • .NET 10.0 или выше

📄 Лицензия

MIT License - см. License

🔗 Ссылки

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.2 173 1/1/2026
1.0.1 151 1/1/2026
1.0.0 144 12/30/2025