SimpleCommandLine
Simple command-line parser for .NET console applications.
Table of Contents
Requirements
.NET 10 or later
Quick Start
Install SimpleCommandLine using Package Manager Console.
Install-Package SimpleCommandLine
This is a small sample code to use SimpleCommandLine.
// Copyright (c) All contributors. All rights reserved. Licensed under the MIT license.
using System;
using System.Threading.Tasks;
using SimpleCommandLine;
namespace ConsoleApp1;
public class TestOptions
{// Option class stores command options. Default constructor is required.
[SimpleOption("number", ShortName = "n", Description = "test number")] // Annotate SimpleOptionAttribute and specify a long/short option name and description.
public int Number { get; set; } = 10; // Set a default value.
[SimpleOption("text", ShortName = "t", Description = "test text", Required = true)] // Set Required property to true if you want to make the option required.
public string Text { get; set; } = string.Empty;
}
[SimpleCommand("test", Description = "Test command.")] // Annotate SimpleCommandAttribute and specify a command name and description.
public class TestCommand : ISimpleCommandAsync<TestOptions> // Implementation of either ISimpleCommandAsync<T> or ISimpleCommand<T> is required.
{// Command class handles the command function.
public async Task RunAsync(TestOptions option, string[] args)
{// RunAsync() method will be called if you specify "test" command-line argument.
// TestOption class is parsed from command-line arguments.
// args is the remaining arguments.
Console.WriteLine("Test command:");
Console.WriteLine($"Number is {option.Number}");
Console.WriteLine($"Text is {option.Text}");
}
}
public class Program
{
public static async Task Main(string[] args)
{
// An array of command types.
// Command type must have SimpleCommandAttribute and implement ISimpleCommandAsync<T> or ISimpleCommand<T>.
var commandTypes = new Type[]
{
typeof(TestCommand),
};
// Parse arguments and call the appropriate command method.
await SimpleParser.ParseAndRunAsync(commandTypes, args); // If you do not specify a text option with a valid value, an error will occur.
Console.WriteLine();
// You can manually create a parser and parse an argument string.
var p = new SimpleParser(commandTypes);
p.Parse("-number 1 -text sample");
await p.RunAsync();
Console.WriteLine();
p.ShowVersion(); // Show application version (1.0.0)
Console.WriteLine();
p.ShowHelp(); // Show help text.
Console.WriteLine();
if (p.TryGetOption("test", "text", out var option))
{// // You can modify the documentation by changing the options registered with SimpleParser.
option.Description = "Modified";
}
p.ShowHelp(); // Show help text.
Console.WriteLine();
}
}