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.
paket add 42.CLI.Toolkit --version 1.0.1
#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.
// Install 42.CLI.Toolkit as a Cake Addin
#addin nuget:?package=42.CLI.Toolkit&version=1.0.1

// Install 42.CLI.Toolkit as a Cake Tool
#tool nuget:?package=42.CLI.Toolkit&version=1.0.1

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 Compatible and additional computed target framework versions.
.NET 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. 
Compatible target framework(s)
Additional computed target framework(s)
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 159 1/5/2024
0.4.0 201 7/31/2023
0.3.0 151 7/31/2023
0.2.0 160 7/31/2023
0.1.0 167 7/26/2023