使用.NET Core快速开发一个较正规的命令行应用程序
程序員的世界,命令行工具一直是“體驗(yàn)非常友好”的工具,也能自動(dòng)化完成很多事情,同時(shí)還能結(jié)合shell來進(jìn)行某項(xiàng)任務(wù)的批處理(腳本)。在.NET Core中,命令行應(yīng)用程序是基礎(chǔ),但是如何實(shí)現(xiàn)像 “cat” 這種功能呢?今天就為大家介紹一個(gè)packages來優(yōu)雅的實(shí)現(xiàn)一個(gè)命令行應(yīng)用程序。
一般命令行程序包含什么?
幫助信息
幫助信息如上,介紹了命令的作用和參數(shù)、選項(xiàng)作用。
這個(gè)是必不可少的。
子命令
一個(gè)應(yīng)用程序打包了多個(gè)功能,這時(shí)候就可以使用子命令,比如 dotnet ef migrations,這時(shí)候 migrations 就是子命令,可以看做本來可以拆分成多個(gè)可執(zhí)行程序的東西,用一個(gè)可執(zhí)行程序來打包完成,子命令可以再次具有自己的幫助、參數(shù)和選項(xiàng)。
參數(shù)
參數(shù)在形式上有點(diǎn)類似子命令,比如 cat hello.txt 這邊的hello.txt就是一個(gè)參數(shù),參數(shù)一般是命令中必須存在的內(nèi)容。比如 cat 命令,沒有輸入路徑則沒法執(zhí)行任何任務(wù)。
選項(xiàng)
選項(xiàng)是指可選項(xiàng),用來擴(kuò)展命令。比如刪除時(shí)是否需要輸出被刪除的文件?是否刪除文件夾?是否遞歸刪除?等等。
如何用.NET Core快速開發(fā)一個(gè)命令行程序?
CommandLineUtils Packages
今天的主角,這邊包主要就是用來做命令行程序的。
說起這個(gè)包的歷史,還是比較曲折的。
這個(gè)包原是aspnet團(tuán)隊(duì)提供的,開源項(xiàng)目在
https://github.com/aspnet/Common
但是大家可以發(fā)現(xiàn)在現(xiàn)在的倉庫的src中已經(jīng)沒有了 CommandLineUtils 這個(gè)項(xiàng)目。
翻看歷史我們可以發(fā)現(xiàn) Microsoft.Extensions.CommandLineUtils 這個(gè)項(xiàng)目
https://github.com/aspnet/Common/tree/rel/1.1.1/src/Microsoft.Extensions.CommandLineUtils
同時(shí)nuget上還是有這個(gè)packages的。
https://www.nuget.org/packages/Microsoft.Extensions.CommandLineUtils/
由于這個(gè)項(xiàng)目是滿足內(nèi)需的(ef migrations,等命令)所以MS并不打算長(zhǎng)期發(fā)展這個(gè)項(xiàng)目。所以MS推薦社區(qū)來維護(hù)一個(gè)類似的項(xiàng)目。
那么就有很多熱心的人開始接力的
https://github.com/natemcmaster/CommandLineUtils(MS官方鏈接)
這個(gè)庫在基礎(chǔ)功能上還增加了
實(shí)現(xiàn)一個(gè)簡(jiǎn)單的cat命令
好了我們介紹了一般命令行程序的構(gòu)成,下面我們來用.NETCore來實(shí)現(xiàn)一個(gè)簡(jiǎn)化版的cat命令。
new CommandLineApplication
Name:命令名稱
Description:命令描述
app.HelpOption("-h|--help")
設(shè)置含有幫助選項(xiàng),觸發(fā)方式為 –h 或者 —help,這邊用 | 分隔。
app.Argument("path", "file")
設(shè)置一個(gè)參數(shù),參數(shù)名為 path,描述為file。還可以設(shè)置參數(shù)是否允許多個(gè)等。
app.Option
設(shè)置了兩個(gè)選項(xiàng),選項(xiàng)的觸發(fā)方式與HelpOption一致,后面一個(gè)參數(shù)是說明。還可以配置這個(gè)參數(shù)是否有值(是否只是開關(guān)),是否只有一個(gè)值,是否允許多個(gè)值等。
app.OnExecute
命令的具體執(zhí)行邏輯。
app.Execute
與主程序?qū)?#xff0c;真正的執(zhí)行者。
邏輯1,參數(shù)驗(yàn)證與轉(zhuǎn)換
邏輯2,具體的輸出
發(fā)布、測(cè)試
使用自宿主的方式發(fā)布一個(gè)win-x64的應(yīng)用。
具體的發(fā)布方式可以看官網(wǎng)文檔
https://docs.microsoft.com/zh-cn/dotnet/core/deploying/
寫在最后
我們來瞅一瞅發(fā)布后的文件夾
是不是太夸張,其實(shí)這種簡(jiǎn)單的程序,我們可以這樣子
這個(gè)我們就留著后面介紹吧,有興趣的可以先去了解下“CoreRT”
https://github.com/dotnet/corert
.NET Core的AOT項(xiàng)目,目前還是alpha版。
總結(jié)
以上是生活随笔為你收集整理的使用.NET Core快速开发一个较正规的命令行应用程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 值传递与引用传递
- 下一篇: WPF绘制简单常用的Path