VOOZH about

URL: https://www.nuget.org/packages/42.CLI.Toolkit/

⇱ NuGet Gallery | 42.CLI.Toolkit 1.0.1




👁 Image
42.CLI.Toolkit 1.0.1

dotnet add package 42.CLI.Toolkit --version 1.0.1
 
 
NuGet\Install-Package 42.CLI.Toolkit -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="42.CLI.Toolkit" Version="1.0.1" />
 
 
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="42.CLI.Toolkit" Version="1.0.1" />
 
Directory.Packages.props
<PackageReference Include="42.CLI.Toolkit" />
 
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 42.CLI.Toolkit --version 1.0.1
 
 
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: 42.CLI.Toolkit, 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 42.CLI.Toolkit@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=42.CLI.Toolkit&version=1.0.1
 
Install as a Cake Addin
#tool nuget:?package=42.CLI.Toolkit&version=1.0.1
 
Install as a Cake Tool
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Getting Started Guide

The text-base UI is the best user interface ever made❣️

This library combines multiple .net libraries into one package to simplify the creation of a CLI application. The result is easy to use because it has a nice interface, is IoC-friendly, and uses the IHostBuilder principle.

Build the host and run it

return await new HostBuilder()
 .UseCommandLineApplication<ToolCommand>(args)
 .UseStartup<Startup>()
 .Build()
 .RunCommandLineApplicationAsync();

Use the Startup class for configuration and building service provider:

public class Startup : IStartup
{
 public void ConfigureApplication(IConfigurationBuilder builder)
 {
 // add any configuration here
 // builder.AddJsonFile("appsettings.json", false, false);
 }

 public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
 {
 services.AddCliToolkit(); // register the toolkit (IExtendedConsole, IRenderer, IPrompter, IProgressReporter)
 // register your services here
 }
}

Build commands

[Subcommand(typeof(ExampleCommand))]
[Command("tool", Description = "Description in help.")]
public class ToolCommand : BaseCommand
{
 public ToolCommand(IExtendedConsole console)
 : base(console)
 {
 // no operation
 }

 [VersionOption("-v|--version", "", Description = "Display version of this tool.")]
 public bool IsVersionRequested { get; set; }

 public Task<int> OnExecuteAsync()
 {
 Console.WriteLine("Hello world!")
 return Task.FromResult(0);
 }
}

The complete documentation on how to structure commands and sub-commands is on GitHub: https://github.com/natemcmaster/CommandLineUtils

Use extended console

For total control, use the IExtendedConsole type from the IoC container; the system of commands uses injection through the constructor.

If needed, there are more specialized interfaces:

  • IRenderer
    • WriteLine(params object[] elements)
    • WriteTree<T>(IComposition<T> root, Func<T, IConsoleOutput> nodeRenderFunction)
    • WriteTable<T>(IEnumerable<T> rows, Func<T, IEnumerable<Cell>> rowRenderFunction, IEnumerable<IHeaderColumn>? headers = null)
    • Write(Document document)
  • IPrompter
    • T Input<T>(InputOptions<T> options)
    • bool Confirm(ConfirmOptions options)
    • IEnumerable<T> List<T>(ListOptions<T> options)
    • T Select<T>(SelectOptions<T> options)
  • IProgressReporter
    • IProgressBar StartProgressBar(string message, ProgressBarOptions? options = null)

More examples

A simple demo application is available at: https://github.com/akobr/mono.me/tree/main/src/Libraries/CLI/Toolkit.Example/src

A complex CLI application: https://github.com/akobr/mono.me/tree/main/src/Monorepo/Cli/src

Adapted libraries

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

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.1 674 1/5/2024
0.4.0 426 7/31/2023
0.3.0 324 7/31/2023
0.2.0 339 7/31/2023
0.1.0 343 7/26/2023