C# (.NET) 的 CLI 框架:创建专业的控制台应用程序
现代 C# (.NET) 开发不仅限于 Web 应用程序和桌面程序。控制台应用程序 (CLI) 在自动化、DevOps 工具、管理实用程序和内部脚本中仍然很受欢迎。然而,手动解析命令行参数是一项繁琐且容易出错的任务。专门的 CLI 框架应运而生,它们负责参数解析、帮助文档生成、验证甚至彩色输出。
在本文中,我们将介绍三种最流行的用于创建 C# (.NET) CLI 的开源解决方案:System.CommandLine(微软官方包)、Spectre.Console 和 Cocona。您将了解它们的关键功能,查看代码示例,并能够为您的项目选择合适的工具。
1. System.CommandLine (Microsoft)
System.CommandLine 是微软的官方库,旨在创建具有丰富参数解析、验证、自动补全和帮助文档生成功能的现代控制台应用程序。它被积极用于 .NET SDK 和其他微软工具中。
主要功能:
- 声明式定义命令、选项和参数。
- 自动生成帮助文档 (--help)。
- 支持用于错误处理和日志记录的中间件。
- 内置类型和值验证。
- 可与依赖注入集成。
代码示例:
using System.CommandLine;
var rootCommand = new RootCommand("一个简单的 CLI 计算器");
var argA = new Argument<int>("a", "第一个数字");var argB = new Argument<int>("b", "第二个数字");var optMultiply = new Option<bool>("--multiply", "用乘法代替加法");
rootCommand.AddArgument(argA);rootCommand.AddArgument(argB);rootCommand.AddOption(optMultiply);
rootCommand.SetHandler((int a, int b, bool multiply) =>{ int result = multiply ? a * b : a + b; Console.WriteLine($"结果: {result}");}, argA, argB, optMultiply);
await rootCommand.InvokeAsync(args);运行: dotnet run -- 5 3 --multiply 将输出 结果: 15。
2. Spectre.Console
Spectre.Console 不仅仅是一个 CLI 框架,更是一个用于创建美观且交互式控制台应用程序的完整生态系统。它包括参数解析(通过 Spectre.Console.Cli 包)、彩色输出、表格、进度条、日历甚至动画。
主要功能:
- 使用属性声明式定义命令。
- 自动生成带有颜色样式的帮助文档。
- 内置 DI 和验证支持。
- 丰富的小部件集:表格、树形图、面板、日历。
- 交互式提示(从列表中选择、确认、文本输入)。
代码示例(使用属性的命令):
using Spectre.Console;using Spectre.Console.Cli;
public class GreetCommand : Command<GreetSettings>{ public override int Execute(CommandContext context, GreetSettings settings) { AnsiConsole.MarkupLine($"[bold green]你好, {settings.Name}![/]"); if (settings.Repeat > 1) { AnsiConsole.MarkupLine($"[yellow]重复了 {settings.Repeat} 次[/]"); } return 0; }}
public class GreetSettings : CommandSettings{ [CommandArgument(0, "[Name]")] public string Name { get; set; } = "世界";
[CommandOption("-r|--repeat <N>")] public int Repeat { get; set; } = 1;}
// 在 Program.cs 中var app = new CommandApp<GreetCommand>();app.Run(args);请