EonaCat.Cli 1.0.0

Prefix Reserved
dotnet add package EonaCat.Cli --version 1.0.0
                    
NuGet\Install-Package EonaCat.Cli -Version 1.0.0
                    
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="EonaCat.Cli" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EonaCat.Cli" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="EonaCat.Cli" />
                    
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 EonaCat.Cli --version 1.0.0
                    
#r "nuget: EonaCat.Cli, 1.0.0"
                    
#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 EonaCat.Cli@1.0.0
                    
#: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=EonaCat.Cli&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=EonaCat.Cli&version=1.0.0
                    
Install as a Cake Tool

EonaCat.Cli

Easily create Cli commands and a help menu using EonaCat.Cli.

var parser = new CliParser()
            .AddOption(new CliOption("help", 'h', description: "Show help", valueType: typeof(bool)))
            .AddOption(new CliOption("name", 'n', isRequired: true, description: "Name of user"))
            .AddOption(new CliOption("count", 'c', description: "Number of times", valueType: typeof(int), defaultValue: 1, validator: val =>
            {
                if (int.TryParse(val.ToString(), out var i))
                    return i > 0;
                return false;
            }))
            .AddOption(new CliOption("verbose", 'v', description: "Verbose output", valueType: typeof(bool)))
            .AddOption(new CliOption("files", 'f', description: "Input files", allowsMultiple: true));

        // Add a sample subcommand "greet"
        parser.AddCommand(new CliCommand(
            "greet",
            "Greet the user",
            new List<CliOption>
            {
                new CliOption("name", 'n', true, description: "Name to greet"),
                new CliOption("count", 'c', description: "Number of greetings", valueType: typeof(int), defaultValue: 1)
            },
            async (result) =>
            {
                if (result.HasFlag("help"))
                {
                    Console.WriteLine("Usage: greet --name <name> [--count <num>]");
                    return;
                }

                string name = result.Get<string>("name");
                int count = result.Get<int>("count");

                for (int i = 0; i < count; i++)
                {
                    Console.WriteLine($"Hello, {name}!");
                    await Task.Delay(100);
                }
            }));

        try
        {
            await parser.ParseAndRunAsync(args);
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
            Console.WriteLine(parser.GetHelpText());
        }
    }
Running help for the greet command:
dotnet run -- greet --help

Outputs:

Usage: greet --name <name> [--count <num>]
Options:
  --name, -n <name>       Name to greet
  --count, -c <num>       Number of greetings (default: 1)
Running the greet command:
dotnet run -- greet --name Alice --count 3

Outputs:

Hello, Alice!
Hello, Alice!
Hello, Alice!
Running without any arguments (prints general help):
dotnet run

Outputs:

Commands:
  greet  -  Greet the user

Options:
    -h, --help  Show help
    -n, --name <string> (required)  Name of user
    -c, --count <int>  Number of times
    -v, --verbose  Verbose output
    -f, --files [multiple]  Input files
dotnet run unknowncmd
dotnet run unknowncmd

Outputs:

Unknown command 'unknowncmd'. Available commands:
greet
Running greet missing required option name:
dotnet run greet

Outputs:

Error: Missing required options: --name
Usage: greet --name <name> [--count <num>]
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.  net9.0 was computed.  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.  net10.0 was computed.  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.
  • net8.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.0 225 6/29/2025