C# (.NET) 的 CLI 框架:System.CommandLine 和 Cocona

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# (.NET) 的 CLI 框架:System.CommandLine 和 Cocona



在 C# 中创建控制台应用程序 (CLI) 长期以来一直与通过 string[] args 手动解析命令行参数以及繁琐的条件结构相关联。然而,随着 .NET 生态系统的发展,出现了专门的框架,它们承担了日常繁琐的工作:参数解析、帮助生成、验证,甚至依赖注入 (DI)。在本文中,我们将探讨两种最流行的方法:微软官方的 System.CommandLine 和轻量但功能强大的 Cocona。



这两种工具都允许您编写简洁、声明式的代码,这些代码易于维护和测试。您将学习如何快速将它们添加到项目中,定义命令和参数,并查看实际的代码示例。



1. System.CommandLine



System.CommandLine 是微软的官方库,是 .NET SDK(从 .NET 6 开始)的一部分。它提供了一套完整的功能,用于构建复杂的 CLI 应用程序:嵌套命令、Tab 键自动补全、验证、异步处理程序和帮助生成。



安装

通过 NuGet 添加包:

dotnet add package System.CommandLine --version 2.0.0-beta4.22272.1


示例:具有两种操作的計算器

让我们创建一个简单的应用程序,它接受 add 或 multiply 命令以及两个数字:

using System.CommandLine;

// 定义根命令var rootCommand = new RootCommand("简单计算器");

// 创建子命令 "add"var addCommand = new Command("add", "两个数相加");var addXOption = new Option<int>("--x", "第一个数字") { IsRequired = true };var addYOption = new Option<int>("--y", "第二个数字") { IsRequired = true };addCommand.AddOption(addXOption);addCommand.AddOption(addYOption);

addCommand.SetHandler((x, y) =>{ Console.WriteLine($"相加结果: {x + y}");}, addXOption, addYOption);

// 创建子命令 "multiply"var multiplyCommand = new Command("multiply", "两个数相乘");var multXOption = new Option<int>("--x", "第一个数字") { IsRequired = true };var multYOption = new Option<int>("--y", "第二个数字") { IsRequired = true };multiplyCommand.AddOption(multXOption);multiplyCommand.AddOption(multYOption);

multiplyCommand.SetHandler((x, y) =>{ Console.WriteLine($"相乘结果: {x * y}");}, multXOption, multYOption);

// 将命令添加到根命令rootCommand.AddCommand(addCommand);rootCommand.AddCommand(multiplyCommand);

// 运行await rootCommand.InvokeAsync(args);


运行应用程序:

dotnet run -- add --x 5 --y 3# 输出: 相加结果: 8

dotnet run -- multiply --x 4 --y 7# 输出: 相乘结果: 28


System.CommandLine 的关键特性

  • 自动补全 — 内置对 bash 和 PowerShell 的 Tab 键补全支持。
  • 帮助生成 — --help 标志会自动生成所有命令和选项的描述。
  • 验证 — 可以设置必需参数、值范围和自定义检查。
  • 异步 — 处理程序支持 async Task。
  • 测试 — 使用 TestConsole 可以轻松编写单元测试。


2. Cocona



Cocona 是一个替代框架,它通过属性和自动参数绑定提供了更简洁的语法。它非常适合中小型项目,在这些项目中开发速度至关重要。Cocona 支持 DI、中间件和嵌套命令。



安装

dotnet add package Co                    

推荐