Post

C# | Building a Command-Line (CLI) App using System.CommandLine Library

Introduction

In this guide, we will explore how to build a Command-Line Interface (CLI) application using the System.CommandLine library in C# and .NET. System.CommandLine simplifies the process of creating robust and feature-rich command-line interfaces for your applications.

Prerequisites

Before getting started, make sure you have the following installed:

  • .NET SDK (version 5.0 or later)

Step 1: Create a new Console Application

1
2
dotnet new console -n MyCommandLineApp
cd MyCommandLineApp

Step 2: Add System.CommandLine NuGet Package

1
dotnet add package System.CommandLine --version 2.0.0-beta1.21308.1

Step 3: Define Command-Line Options

In your Program.cs, define the command-line options using System.CommandLine:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System.CommandLine;
using System.CommandLine.Invocation;

class Program
{
    static int Main(string[] args)
    {
        var rootCommand = new RootCommand
        {
            new Option<int>("--number", "An integer option"),
            new Option<bool>("--flag", "A boolean option"),
            new Argument<string>("input", "A required input argument")
        };

        rootCommand.Handler = CommandHandler.Create<int, bool, string>((number, flag, input) =>
        {
            // Your application logic goes here
            Console.WriteLine($"Number: {number}");
            Console.WriteLine($"Flag: {flag}");
            Console.WriteLine($"Input: {input}");
        });

        return rootCommand.Invoke(args);
    }
}

Step 4: Run the CLI App

1
dotnet run -- --number 42 --flag true "Hello, CLI!"

Replace the values with your own and see the output.

Step 5: Customize Help Text

Add descriptions to your options and arguments for better help text:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var rootCommand = new RootCommand
{
    new Option<int>("--number", "An integer option"),
    new Option<bool>("--flag", "A boolean option"),
    new Argument<string>("input", "A required input argument")
};

rootCommand.Description = "A simple CLI app";
rootCommand.Handler = CommandHandler.Create<int, bool, string>((number, flag, input) =>
{
    Console.WriteLine($"Number: {number}");
    Console.WriteLine($"Flag: {flag}");
    Console.WriteLine($"Input: {input}");
});

What Next?

You have successfully created a basic Command-Line Interface (CLI) application using the System.CommandLine library in C# and .NET. Customize and extend the application based on your specific requirements. For more information, refer to the official documentation: System.CommandLine GitHub

This post is licensed under CC BY 4.0 by the author.