CliRunner 0.8.0
See the version list below for details.
dotnet add package CliRunner --version 0.8.0
NuGet\Install-Package CliRunner -Version 0.8.0
<PackageReference Include="CliRunner" Version="0.8.0" />
paket add CliRunner --version 0.8.0
#r "nuget: CliRunner, 0.8.0"
// Install CliRunner as a Cake Addin #addin nuget:?package=CliRunner&version=0.8.0 // Install CliRunner as a Cake Tool #tool nuget:?package=CliRunner&version=0.8.0
CliRunner
CliRunner is a library for interacting with Command Line Interfaces and wrapping around executables.
Features
- For .NET 8 and newer TFMs CliRunner is dependency free ^1
- 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 workflows for Pipe Handling (through ICommandPipeHandler) and Command Execution (through ICommandRunner).
- 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 - RuntimeExtensions dependency and Polyfill are only required for .NET Standard 2.0 and 2.1 users
^2 - Specialization library is distributed separately.
Support
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.Buffered;
var result = await Command.CreateInstance("Path/To/Exe")
.WithArguments(["arg1", "arg2"])
.WithWorkingDirectory("/Path/To/Directory")
.ExecuteBufferedAsync();
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.Runtime (>= 2.1.0 && < 3.0.0)
- PolyFill (>= 7.11.0 && < 8.0.0)
-
.NETStandard 2.1
- AlastairLundy.Extensions.Runtime (>= 2.1.0 && < 3.0.0)
- PolyFill (>= 7.11.0 && < 8.0.0)
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
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.
## Changes since 0.7.0
### Breaking Changes
* ``CommandRunner`` is once again a standalone class implementing the ICommandRunner interface and is separate from the Command class
* Command Pipe Handling has been moved from ``CommandRunner`` to the newly created ``CommandPipeHandler`` as the default ``ICommandPipeHandler`` implementation
* ``CommandRunner`` now requires a ``ICommandPipeHandler`` compatible implementer to be passed to it in the constructor
* The ``Command`` class now no longer implements ``ICommandRunner``
* Added extension methods to ``Command`` to make it easy to fluently Execute Commands whilst passing through an ``ICommandRunner`` instance.
* Simplified ``CommandRunner``'s ``CreateStartInfo`` method
* Namespace changes for CliRunner Command related code to be in the base CliRunner namespace.
### Non-Breaking Changes
#### Additions
* Clarified support for Mac Catalyst
* Implemented ``Command``'s ``ToString()`method
* Implemented ``IEquatable`` in ``Command``
* Added ``CreateInstance`` static method to ``Command`` class - This is the new intended entrypoint in CliRunner.
* Added properties in ``Command`` to ``ICommandConfiguration`` that were missing.
* Added Encoding properties to store the Encoding types of Standard Input, Standard Output, and Standard Error
#### General Changes
* Merged some private CommandRunner methods
* Deprecated ``Cli.Run()`` - Please use ``Command.CreateInstance()`` instead.
### Bug Fixes
* Fixed a bug in Standard Input piping that resulted in unexpected behaviour
* Fixed a bug in ``CreateStartInfo`` method in CommandRunner with preventing code from running on unsupported platforms
* Fixed a typo in a xml doc comment
### Removals
* Removed the ``ISpecializedCommand`` interface
* Removed some unnecessary code now that Polyfill is being used on .NET Standard 2.0 & 2.1