日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
DotnetCore優(yōu)雅的命令行實現(xiàn)

本文轉(zhuǎn)載自微信公眾號「老王Plus」,作者老王Plus的老王。轉(zhuǎn)載本文請聯(lián)系老王Plus公眾號。

成都創(chuàng)新互聯(lián)公司專注于婁星網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供婁星營銷型網(wǎng)站建設(shè),婁星網(wǎng)站制作、婁星網(wǎng)頁設(shè)計、婁星網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造婁星網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供婁星網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

前言

控制臺應(yīng)用 Console,在我們開發(fā)中用處很多。小到一個簡單的功能測試,或一組不需要復(fù)雜 UI 的工具類應(yīng)用,大到后端的服務(wù),都會用到 Console。

在這里面,命令行應(yīng)用 Cli,又是非常典型的一個應(yīng)用類型。

命令行應(yīng)用,通常概念上需要我們輸入一定參數(shù),根據(jù)參數(shù)的不同,選擇不同的程序流程或方法來執(zhí)行。

舉個簡單的例子:

 
 
 
  1. % python3
  2. Python 3.9.0 (default, Nov 13 2020, 12:12:14) 
  3. [Clang 12.0.0 (clang-1200.0.32.21)] on darwin
  4. Type "help", "copyright", "credits" or "license" for more information.
  5. >>> import OS
  6. Traceback (most recent call last):
  7.   File "", line 1, in 
  8. ModuleNotFoundError: No module named 'OS'
  9. >>> import os
  10. >>> print("Hello WangPlus")
  11. Hello WangPlus
  12. >>> exit()

不需要管 python3 是什么,這不重要。

我們能看到,當(dāng)進(jìn)入一個命令行時,一般首先會有簡單的功能介紹,然后是一個提示符,在這里是 >>>。然后可以輸入命令和參數(shù),如果輸入正確,會有錯誤提示。如果輸入正確,會有適當(dāng)?shù)妮敵觥?/p>

通常,如果想實現(xiàn)這樣的效果,我們需要一個大的循環(huán),來解析和響應(yīng)輸入的命令和參數(shù),然后進(jìn)行對應(yīng)的處理。

事實上,在做這樣一個應(yīng)用時,會有很大的精力來處理這個循環(huán)。不相信的話,可以自己試著寫一寫。

今天給大家介紹的,是一個庫,Nuget 上的庫,也是我最近無意中發(fā)現(xiàn)的,但給了我很大的驚喜。事實上,我自己在寫應(yīng)用時,如果有可能,我會優(yōu)先采用 Console 或 Cli 的方式來寫,輕量、快速,不用處理太多 UI 方面的工作。

這個庫叫 CommandLineTool。

下面進(jìn)入正題,我從頭介紹一下這個庫的使用。

創(chuàng)建項目

先來創(chuàng)建項目。老習(xí)慣,用命令行創(chuàng)建:

 
 
 
  1. % dotnet new console -o demo -f net5.0

這兒需要注意一下,這個庫目前支持到 Dotnet Core 5.0,所以我們就用 5.0 了。

然后,引入 CommandLineTool:

 
 
 
  1. % dotnet add package CommandLineTool

就這樣,工程就算是建完了。

實現(xiàn)功能

這個庫最簡單的地方,是實現(xiàn)起來非常簡單。

第一步,先建一個類

這個類,就是我們要實現(xiàn) Cli 命令行功能的類 TestCLI:

 
 
 
  1. [App("Demo")]
  2. public class TestCLI
  3. {
  4. }

類是空的,先不管它。

第二步,在 Program.cs 里加入這個類

 
 
 
  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {
  5.         Cli cli = new Cli(typeof(TestCLI))
  6.         {
  7.             Introduction = "這是一個 Demo 應(yīng)用",
  8.             PromptText = "WangPlus",
  9.         };
  10.         cli.SetCancellationKeys(new() { "exit" });
  11.         cli.Start();
  12.     }
  13. }

看一個加入的內(nèi)容:

Introduction - 這個 Cli 的說明,提示一下這個程序的功能,隨便寫;

PromptText - 這個是提示符的內(nèi)容,類似于最上面例子的 >>>;

下面這一句cli.SetCancellationKeys(new() { "exit" });,是定義了退出的命令。也就是說,在提示符后輸入 exit,應(yīng)用就退出了。

跑一下這個應(yīng)用:

 
 
 
  1. % dotnet demo.dll
  2. 這是一個 Demo 應(yīng)用
  3. WangPlus > ?
  4. '?' was not matched. Did you mean '-h'?
  5. Unrecognized command or argument '?'
  6. demo
  7.   Demo
  8. Usage:
  9.   demo [options]
  10. Options:
  11.   --version       Show version information
  12.   -?, -h, --help  Show help and usage information
  13. WangPlus >exit
  14. Terminating console...

哇哈哈,一個簡單的 Cli 架子搭出來了。

第三步,開始寫命令處理

命令處理放在 TestCLI.cs 中。

 
 
 
  1. [App("Demo")]
  2. public class TestCLI
  3. {
  4.     [Command("hello", "就是打個招呼")]
  5.     public static void Hello([ParamArgument()] string name)
  6.     {
  7.         Console.WriteLine($"Hello {name}");
  8.     }
  9. }

方法還是我們非常熟悉的一個普通方法,并沒有什么特別的。

再跑一下:

 
 
 
  1. WangPlus >hello
  2. Required argument missing for command: hello
  3. hello
  4.   就是打個招呼
  5. Usage:
  6.   demo [options] hello 
  7. Arguments:
  8.   
  9. Options:
  10.   -?, -h, --help  Show help and usage information
  11. WangPlus >hello wang  
  12. Hello wang

出來效果了。

重點看一下代碼里的幾個部分:

屬性 Command,里面兩個參數(shù),第一個參數(shù)就是我們要實現(xiàn)的命令,第二個參數(shù)是命令的說明。

方法里,[ParamArgument()] 表示后面跟的參數(shù)來自于輸入的命令的參數(shù)。

下面還有幾種形式:

 
 
 
  1. //多個參數(shù)
  2. [Command("multiinput", "多個參數(shù)")]
  3. public static void MultiInput([ParamArgument()] List names) {}
  4. //多個文件
  5. [Command("multifile", "多個文件")]
  6. public static void MultiFile([ParamArgument()] List files) {}
  7. //額外的參數(shù)
  8. [Command("withpara", "額外參數(shù)")]
  9. public static void WithPara([ParamArgument()] string names, [ParamOption("-a")] string op1) {}

重點說一下額外參數(shù)的方式。

有時候,我們可能需要下面的方式來處理命令:

 
 
 
  1. % demo -a a-value -b b-value command

這個方式,就是來解決這樣的問題的。

有沒有 Get 到爽點?

本文有配套代碼,在 https://github.com/humornif/Demo-Code/tree/master/0053/demo


分享題目:DotnetCore優(yōu)雅的命令行實現(xiàn)
網(wǎng)站URL:http://m.5511xx.com/article/cdjdodi.html