为什么 C# 是 CLI 工具的理想选择,以及这对 Python 开发者为何重要
\n当我们谈论创建控制台工具时,首先想到的往往是 Python、Bash 或 Go。但如果我告诉你,C# 是编写快速、跨平台且美观的 CLI 工具 最被低估的语言之一呢?没错,就是那个许多人将其与 Web 表单和企业级庞然大物联系在一起的 C#。
\n随着 .NET 6/8 的发布,C# 拥有了最小 API、原生编译(AOT)以及极其便捷的 System.CommandLine 库。现在,创建一个能在 Windows、Linux 和 macOS 上运行的工具,只需 15 分钟。对于学习 Python 的学生和开发者来说,这是扩展工具箱并了解其他语言中 CLI 工具工作原理的绝佳方式。
在本文中,我们不仅仅是编写一个 "Hello World"。我们将创建一个功能完整的文件处理工具,它能够解析参数、输出彩色文本、处理错误,甚至显示进度条。开始吧!
\n\n项目配置:最少的操作
\n首先需要确保已安装 .NET SDK(版本 6.0 或更高)。检查方法很简单:
\ndotnet --version\n如果一切正常,创建一个新的控制台项目:
\ndotnet new console -n FileGuardian\ncd FileGuardian\n在这个阶段,我们已经得到了一个现成的框架。但对于一个真正的 CLI 工具,我们需要一个用于参数解析的库。添加它:
\ndotnet add package System.CommandLine --version 2.0.0-beta4.22272.1\n完成。现在我们拥有了创建专业 C# 控制台应用程序 所需的一切。
\n\n为什么选择 System.CommandLine 而不是手动解析?
\n许多新手会写 args[0]、args[1],然后遭遇 IndexOutOfRangeException。这是一条痛苦之路。System.CommandLine 提供了:
- \n
- 自动解析标志(
--output、-o) \n - 输入错误时的提示 \n
- 内置的
--help生成 \n - 支持子命令(如 git 中的) \n
这是任何严肃的 C# 控制台工具 的必备功能。
\n\n编写工具核心:第一个命令
\n想象一下,我们正在创建一个文件监控工具——FileGuardian。它将检查文件大小,并在文件超过限制时发出警告。听起来很实用,对吧?
\n打开 Program.cs 并编写以下代码:
using System.CommandLine;\n\nvar rootCommand = new RootCommand("FileGuardian — 文件监控工具");\n\nvar fileOption = new Option<FileInfo?>(\n name: "--file",\n description: "要分析的文件路径"\n);\nrootCommand.AddOption(fileOption);\n\nrootCommand.SetHandler((file) =>\n{\n if (file is null || !file.Exists)\n {\n Console.Error.WriteLine("❌ 文件未找到!");\n return;\n }\n \n long sizeInBytes = file.Length;\n double sizeInMb = sizeInBytes / (1024.0 * 1024.0);\n \n Console.WriteLine($"📄 文件: {file.Name}");\n Console.WriteLine($"📏 大小: {sizeInMb:F2} MB");\n \n if (sizeInMb > 100)\n Console.WriteLine("⚠️ 警告:文件超过 100 MB!");\n}, fileOption);\n\nawait rootCommand.InvokeAsync(args);\n运行:
\ndotnet run -- --file somefile.txt\n已经可以工作了。但这只是开始。让我们添加一些亮点——彩色输出和进度条。
\n\n美观输出:添加颜色和表情符号
\n控制台不一定是黑白的。C# 可以轻松更改文本颜色。创建一个辅助类:
\npublic static class ConsoleHelper\n{\n public static void WriteSuccess(string message)\n {\n Console.ForegroundColor = ConsoleColor.Green;\n Console.WriteLine($"✅ {message}"