C# (.NET) 的 CLI 框架:创建控制台应用程序

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

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

开始课程

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);


请

推荐