ZetCode

C# Cocona

最后修改时间:2024 年 1 月 18 日

在本文中,我们将使用 Cocona 库在 C# 中创建简单的控制台应用程序。

Cocona 是一个库,它可以轻松快速地在 .NET 上构建控制台应用程序。 该库模仿 ASP.NET Core Minimal API。 它具有类似于标准 Unix 工具的语义。

该库有两个版本:Cocona 和 Cocona.Light。 Light 版本具有更少的开销和功能。 它没有日志记录、DI 和配置。

C# Cocona 简单示例

我们有一个非常简单的控制台应用程序。

Program.cs
using Cocona;

CoconaLiteApp.Run((string name) =>
{
    Console.WriteLine($"Hello {name}");
});

如果我们的应用程序只有一个命令,我们可以直接使用 CoconaLiteApp.Run 方法。 Cocona 从方法参数(name)创建一个命令行选项。

$ dotnet run --name Peter
Hello Peter

我们将一个值传递给 --name 选项。 程序用问候消息响应。

$ dotnet run -- --help
Usage: FirstEx [--name <String>] [--help] [--version]

FirstEx

Options:
    --name <String>     (Required)
    -h, --help         Show help message
    --version          Show version

Cocona 自动创建应用程序帮助。 由于 dotnet 命令也具有 --help 选项,因此我们必须在我们的选项前加上 --


前面的代码是以下代码的缩短版本

Program.cs
using Cocona;

var builder = CoconaLiteApp.CreateBuilder();
var app = builder.Build();

app.AddCommand((string name) =>
{
    Console.WriteLine($"Hello {name}");
});

app.Run();

在此代码示例中,我们使用构建器构建 Cocona 应用程序,并使用 AddCommand 添加新命令。

app.Run();

Run 方法启动启用 Cocona 的应用程序。

基于类的示例

在基于类的应用程序中,公共方法会自动转换为命令。

Program.cs
using Cocona;

class Program
{
    static void Main(string[] args)
    {
        CoconaLiteApp.Run<Program>(args);
    }

    public void Message(string name, int age)
    {
        Console.WriteLine($"{name} is {age} years old");
    }
}

该程序接受两个选项:--name--age

$ dotnet run --name John --age 34
John is 34 years old

多个命名命令

我们可以添加多个命名命令。

Program.cs
using Cocona;

var app = CoconaLiteApp.Create();

app.AddCommand("add", () => { Console.WriteLine("add command"); });
app.AddCommand("remove", () => { Console.WriteLine("remove command");});
app.AddCommand("show", () => { Console.WriteLine("show command"); });

app.Run();

该示例添加了三个命名命令。

app.AddCommand("add", () => { Console.WriteLine("add command"); });

第一个参数是命令的名称。 第二个参数是指向命令主体的委托。

标志

可以使用 Option 属性添加标志。

Program.cs
using Cocona;

var app = CoconaLiteApp.Create();

app.AddCommand(([Option('f')] bool force, [Option('r')] bool recursive) =>
{
    Console.WriteLine(force);
    Console.WriteLine(recursive);
});

app.Run();

该示例添加了两个标志:-f-r

$ dotnet run -- -f -r
True
True

$ dotnet run -- -fr
True
True

我们可以使用 -f -r-fr 这两种变体。

一个值的数组

可以将值的数组插入到数组中。 此选项在 light Cocona 应用程序中不受支持。

Program.cs
using Cocona;

var app = CoconaApp.CreateBuilder().Build();

app.AddCommand(([Option('N')]string[] names) =>
{
    foreach (var name in names)
    {
        Console.WriteLine(name);
    }
});

app.Run();

该程序接受 -N 选项的一个或多个值。

app.AddCommand(([Option('N')]string[] names) =>

字符串数组使用 [Option('N')] 属性进行修饰。

$ dotnet run -NPaul -NJane -NJohn -NLucy
Paul
Jane
John
Lucy

来源

Cocona Github 页面

在本文中,我们已经使用 Cocona 在 C# 中创建了简单的控制台应用程序。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 我从 2007 年开始撰写编程文章。到目前为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程