C# (.NET) के लिए CLI फ्रेमवर्क: System.CommandLine और Spectre.Console
C# में गुणवत्तापूर्ण कंसोल एप्लिकेशन (CLI) बनाना एक ऐसा कार्य है जिसमें न केवल कमांड लाइन आर्गुमेंट को प्रोसेस करना शामिल है, बल्कि डेटा की सुविधाजनक प्रस्तुति, सबकमांड का समर्थन, मान्यता और इंटरैक्टिविटी भी शामिल है। .NET इकोसिस्टम में इसके लिए दो शक्तिशाली उपकरण हैं: Microsoft का आधिकारिक System.CommandLine और बहुमुखी लाइब्रेरी Spectre.Console। इस लेख में, हम उनकी क्षमताओं पर विस्तार से चर्चा करेंगे, उपयोग के उदाहरण दिखाएंगे और दृष्टिकोणों की तुलना करेंगे।
1. System.CommandLine: Microsoft का आधिकारिक पार्सर
System.CommandLine एक ओपन-सोर्स लाइब्रेरी है जो कमांड, आर्गुमेंट, विकल्प और हैंडलर को परिभाषित करने का एक घोषणात्मक तरीका प्रदान करती है। यह .NET SDK ( .NET 6 से शुरू) का हिस्सा है और NuGet पैकेज के रूप में उपलब्ध है।
मुख्य विशेषताएं
- एट्रीब्यूट या fluent API का उपयोग करके कमांड संरचना का घोषणात्मक विवरण।
- स्वचालित सहायता पीढ़ी (
--help)। - नेस्टेड कमांड (subcommands) और उपनामों का समर्थन।
- आर्गुमेंट और विकल्पों का मान्यकरण (प्रकार, श्रेणियाँ, अनिवार्यता)।
- DI कंटेनर और middleware के साथ एकीकरण।
उदाहरण: दो कमांड वाला सरल एप्लिकेशन
आइए एक कंसोल एप्लिकेशन बनाएं जो greet और calc कमांड को सपोर्ट करता है।
using System.CommandLine;
var rootCommand = new RootCommand("बहु-कार्यात्मक CLI एप्लिकेशन");
// greet कमांडvar greetCommand = new Command("greet", "उपयोगकर्ता का अभिवादन");var nameOption = new Option<string>( "--name", () => "दुनिया", "अभिवादन के लिए नाम");greetCommand.AddOption(nameOption);
greetCommand.SetHandler((string name) =>{ Console.WriteLine($"नमस्ते, {name}!");}, nameOption);
// calc कमांडvar calcCommand = new Command("calc", "सरल कैलकुलेटर");var aArgument = new Argument<int>("a", "पहली संख्या");var bArgument = new Argument<int>("b", "दूसरी संख्या");var operationOption = new Option<string>( "--operation", () => "add", "ऑपरेशन: add, sub, mul, div");calcCommand.AddArgument(aArgument);calcCommand.AddArgument(bArgument);calcCommand.AddOption(operationOption);
calcCommand.SetHandler((int a, int b, string op) =>{ var result = op switch { "add" => a + b, "sub" => a - b, "mul" => a * b, "div" => b != 0 ? a / b : throw new DivideByZeroException(), _ => throw new ArgumentException("अज्ञात ऑपरेशन") }; Console.WriteLine($"परिणाम: {result}");}, aArgument, bArgument, operationOption);
rootCommand.AddCommand(greetCommand);rootCommand.AddCommand(calcCommand);
return await rootCommand.InvokeAsync(args);एप्लिकेशन चलाना:
dotnet run -- greet --name "PythonLib"dotnet run -- calc 10 5 --operation mul2. Spectre.Console: सुंदरता और इंटरैक्टिविटी
Spectre.Console सुंदर कंसोल इंटरफ़ेस बनाने के लिए एक लाइब्रेरी है। यह आर्गुमेंट पार्सर को प्रतिस्थापित नहीं करता है, बल्कि इसे पूरी तरह से पूरक करता है: रंगीन आउटपुट, तालिकाएँ, प्रोग्रेस बार, इंटरैक्टिव मेनू और यहाँ तक कि कंसोल में ड्राइंग भी।
मुख्य विशेषताएं
- Markdown समर्थन के साथ रंगीन और स्वरूपित आउटपुट।
- तालिकाएँ, चार्ट, कैलेंडर।
- इंटरैक्टिव घटक: सूची से चयन, टेक्स्ट इनपुट, पुष्टिकरण।
- एनिमेशन (स्पिनर, प्रोग्रेस बार)।
- बॉर्डर, पैनल और कॉलम बनाना।
उदाहरण: इंटरैक्टिव मेनू और तालिका
आइए दिखाते हैं कि चयन मेनू कैसे बनाएं और डेटा को तालिका के रूप में कैसे प्रदर्शित करें।
using Spectre.Console;
// इंटरैक्टिव मेनूvar choice = AnsiConsole.Prompt( new SelectionProm