記得之前出過幾篇.net tool工具的文章,當時的做法是所有工具的語法分析全部自己解釋,自己執行,語法的解釋占了大部分時間,反而工具的功能被弱化了。
其實微軟有一個CommandLine框架在緩慢的發展著,至今都沒有正式發布,那就是System.CommandLine。可以通過NuGet來引用System.CommandLine,它的github地址是https://github.com/dotnet/command-line-api。它的學習文檔可參考https://docs.microsoft.com/zh-cn/dotnet/standard/commandline/。按照微軟的建議,這個庫還在發展中,有可能有較大的改變,所以不建議生產。但這些不耽誤我們學習理解他的思路。
先看一小段代碼,開始對CommandLine命令的認識
//根命令var rootCommand = new RootCommand("這是一個命令行工具:旦貓");rootCommand.SetHandler(() =>{Console.WriteLine("歡迎使用《旦貓》");});//字命令,可以添加到根命令下面var sub1Command = new Command("show", "顯示一些信息");rootCommand.Add(sub1Command);sub1Command.SetHandler(() =>{Console.WriteLine("這是《旦貓》的show命令");});//開始執行命令await rootCommand.InvokeAsync(args);
可以通過右鍵項目文件,“通過終端打開”,在終端上輸入dotnet run命令來測試自己的命令行工具。
這里有根命令,并設置了命令執行的內容是控制臺上輸出歡迎語。
還有一個子命令show,同樣輸出不同的歡迎語。
如果輸入不存的命令,會有幫助信息。
并且自帶了版本和幫助,幫助是需要自定義的,版本就簡單了,如果項目信息是這樣的
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>net7.0</TargetFramework><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable><Version>1.0.0.2</Version></PropertyGroup><ItemGroup><PackageReference Include="System.CommandLine" Version="2.0.0-beta3.22114.1" /></ItemGroup>
</Project>
結果會自動提取版本號過來,為我們節省了這塊一發的時間
關于System.CommandLine的介紹,后篇分享。