CliRunner 0.11.0
See the version list below for details.
dotnet add package CliRunner --version 0.11.0
NuGet\Install-Package CliRunner -Version 0.11.0
<PackageReference Include="CliRunner" Version="0.11.0" />
paket add CliRunner --version 0.11.0
#r "nuget: CliRunner, 0.11.0"
// Install CliRunner as a Cake Addin #addin nuget:?package=CliRunner&version=0.11.0 // Install CliRunner as a Cake Tool #tool nuget:?package=CliRunner&version=0.11.0
CliRunner
CliRunner is a library for interacting with Command Line Interfaces and wrapping around executables.
Features
- For .NET 8 and newer TFMs CliRunner has few dependencies ^1
- Dependency Injection extensions to make using it easier.
- Support for specific specializations such as running executables or commands via Windows Powershell or CMD on Windows ^2
- SourceLink support
Why use CliRunner over CliWrap?
- Greater separation of concerns with the Command class (v0.8.0 and newer) - Command Running and Pipe handling are moved to separate classes.
- Supports Dependency Injection and promotes the Single Responsibility Principle
- No hidden or additional licensing terms are required beyond the source code license.
- No imported C code - This library is entirely written in C#.
- No lock in regarding Piping support - Use .NET's StreamWriter and StreamReader classes as inputs and outputs respectively.
- Uses .NET's built in
Process
type.
^1 - OSCompatibilityLib dependency and Polyfill are only required for .NET Standard 2.0 and 2.1 users
^2 - Specialization library is distributed separately.
Supported Platforms
This can be added to any .NET Standard 2.0, .NET Standard 2.1, .NET 8, or .NET 9 supported project.
Operating System | Support Status | Notes |
---|---|---|
Windows | Fully Supported ✅ | |
macOS | Fully Supported ✅ | |
Mac Catalyst | Fully Supported ✅ | |
Linux | Fully Supported ✅ | |
FreeBSD | Fully Supported ✅ | |
Android | Untested Platform ⚠️ | Support for this platform has not been tested but should theoretically work. |
IOS | Not Supported ❌ | Not supported due to Process.Start() not supporting IOS. ^3 |
tvOS | Not Supported ❌ | Not supported due to Process.Start() not supporting tvOS ^3 |
watchOS | Not Supported ❌ | Not supported due to Process.Start() not supporting watchOS ^4 |
Browser | Not Supported ❌ | Not supported due to not being a valid target Platform for executing programs. |
^3 - See the Process class documentation for more info.
^4 - Lack of watchOS support is implied by lack of IOS support since watchOS is based on IOS.
Note: This library has not been tested on Android or Tizen!
Installation
- Nuget or
dotnet add package CliRunner
Usage
CliRunner uses a fluent builder style of syntax to easily configure and run Commands.
The following example shows how to configure and build a Command that returns a BufferedCommandResult which contains redirected StandardOutput and StandardError.
using CliRunner;
using CliRunner.Builders;
using CliRunner.Extensions;
/// Initialize CommandRunner with Dependency Injection.
ServiceCollection services = new ServiceCollection();
services.UseCliRunner();
ServiceProvider sp = services.Build();
ICommandRunner _commandRunner = sp.GetService<ICommandRunner>();
// Build your Command fluently
ICommandBuilder builder = new CommandBuilder("Path/To/Executable")
.WithArguments(["arg1", "arg2"])
.WithWorkingDirectory("/Path/To/Directory");
Command command = builder.ToCommand();
var result = await _commandRunner.ExecuteBufferedAsync(command);
License
CliRunner is licensed under the MPL 2.0 license. If you modify any of CliRunner's files then the modified files must be licensed under the MPL 2.0 .
If you use CliRunner in your project please make an exact copy of the contents of CliRunner's LICENSE.txt file available either in your third party licenses txt file or as a separate txt file.
Acknowledgements
This project would like to thank the following projects for their work:
For more information please see the THIRD_PARTY_NOTICES file.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- AlastairLundy.Extensions.Collections (>= 6.0.0-alpha.1 && < 6.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.1 && < 10.0.0)
- PolyFill (>= 7.15.0 && < 8.0.0)
-
.NETStandard 2.1
- AlastairLundy.Extensions.Collections (>= 6.0.0-alpha.1 && < 6.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.1 && < 10.0.0)
- PolyFill (>= 7.15.0 && < 8.0.0)
-
net8.0
- AlastairLundy.Extensions.Collections (>= 6.0.0-alpha.1 && < 6.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.1 && < 10.0.0)
-
net9.0
- AlastairLundy.Extensions.Collections (>= 6.0.0-alpha.1 && < 6.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.1 && < 10.0.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on CliRunner:
Package | Downloads |
---|---|
PlatformKit
Cross-platform Operating System Detection, Operating System Version Detection, Apple Silicon Mac Detection, programmatic .NET Runtime ID Generation, and more. For a full list of features please visit: https://github.com/alastairlundy/PlatformKit/blob/main/docs/FeatureComparisonByPlatform.md |
|
CliRunner.Specializations
CliRunner Specializations is a library for providing Specializations of CliRunner's Commands. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.0-alpha.2 | 25 | 2/9/2025 |
1.0.0-alpha.1 | 13 | 2/6/2025 |
0.12.0 | 68 | 2/4/2025 |
0.11.0 | 105 | 1/30/2025 |
0.10.0 | 78 | 1/26/2025 |
## Changes since 0.10.0
### Additions
* Added .NET 9 TFM
* Added additional xml doc comments
* Added dependency on CollectionsExtensions and reduced technical debt
* Added ``ICommandBuilder`` interface and ``CommandBuilder`` class - CommandBuilder is now the expected way to build Commands fluently with builder methods. Non Builder usage of ``Command`` continues to be supported by ``Command``
### Breaking Changes
* Removed ``ICommandConfigurationBuilder`` interface and removed ``Command`` class's inheritance of it.
### Non-Breaking Changes
* Deprecated use of ``Command``'s ``CreateInstance`` static methods - Use suggested alternatives where appropriate. These methods will be removed in a future version.
* Deprecated use of ``Command``'s Builder methods - Use the new ``CommandBuilder`` builder class instead. ``Command``'s builder methods will be removed in a future version.
* ``BufferedCommandResult`` is now part of the base ``CliRunner`` namespace. No extra using namespace required.
* Clarified usages of 2 types in ``ArgumentsBuilder`` with explicit typing
* [.NET Standard 2.0 and 2.1 only] Updated Polyfill requirement from 7.14.0 to 7.15.0
### Removals
* [.NET Standard 2.0 and 2.1 only] Removed dependency on OSCompatibilityLib for CliRunner (Not for Specializations library)