中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#命令行參數解析庫System.CommandLine的使用方法

發布時間:2021-06-03 15:00:24 來源:億速云 閱讀:429 作者:小新 欄目:開發技術

這篇文章主要介紹了C#命令行參數解析庫System.CommandLine的使用方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

命令行參數

平常在日常的開發過程中,會經常用到命令行工具。如cmd下的各種命令。

以下為sc命令執行后的截圖,可以看到,由于沒有輸入任何附帶參數,所以程序并未執行任何操作,只是輸出了描述和用法。

C#命令行參數解析庫System.CommandLine的使用方法

系統在創建一個新進程時,會傳一個命令行給它,也就是命令行字符串。

程序需要對命令行字符串進行解析,并執行相應操作。

如使用sc query可以查詢當前系統的服務:

C#命令行參數解析庫System.CommandLine的使用方法

在C#中的控制臺程序中,Main函數中傳入的args字符串數組,就是系統傳入進程的命令行參數。

C#命令行參數解析庫System.CommandLine的使用方法

在構建具有復雜命令行參數的控制臺程序時 ,手動解析參數就變得非常麻煩。這里推薦一個開源的庫,可以更加方便的解析命令行參數。

System.CommandLine介紹

System.CommandLine是一個基于.Net Standard 2.0(支持.Net FrameWork 4.6.1.2+和.Net Core 2.0+)的命令行參數解析庫,項目地址https://github.com/dotnet/command-line-api,目前,該項目還是屬于beta狀態,期待以后的正式版本。

由于不是正式版本,在Nuget中引用時,需要鉤上Include prerelease,才能找到這個包。

C#命令行參數解析庫System.CommandLine的使用方法

System.CommandLine的一些基本概念

Token(標記)

命令行的每個單詞都是一個標記,如下面的"sc"、"query"和"eventlog"都是一個Token

C#命令行參數解析庫System.CommandLine的使用方法

Commands(命令)

Commands就是應用程序根據Token執行相應的操作(在System.CommandLine庫中,對應 Command類)

Root Command(根命令)

根命令是代表可執行程序本身的Commands,如 sc(在System.CommandLine庫中,對應RootCommand類)

SubCommands(子命令)

一些命令行程序會有SubCommands,如上面的sc query中的query就是子命令(在System.CommandLine,對應Command類)

Options(可選項)

Options就是傳遞給Commands的命名參數,如 app -myoption123中的 -myoption 123就是一個Options

Argument(參數)

參數就是傳遞給選項或命令的值。

說明:

常規的調用如下:

xx.exe [options] <argument> [command]

Delimiters(分隔符)

分隔符就是把Options的命令和值分開的符號

如下三種寫法都是一樣的,可以使用空格、=或 :符號

app -myoption 123

app -myoption=123

app -myoption:123

Aliases(別名)

可以為命令或選項設置較短的別名,如

-v, --verbose

--o, --option

System.CommandLine使用

在下面的示例中,我們會構建一個簡單的控制臺爬蟲工具。

1、使用Visual Studio 2019創建一個.Net Core控制臺程序crawler-line

C#命令行參數解析庫System.CommandLine的使用方法

2、導入System.CommandLine包

C#命令行參數解析庫System.CommandLine的使用方法

3、創建一個RootCommand

var rootCommand = new RootCommand
            {
                new Argument<string>(
                    "url","web site url"),
                new Option<bool>(new string[]{ "--gethtml" ,"-html"},"Get html source"),
                new Option<bool>(new string[]{ "--getimage" ,"-image"},"Get images"),
                new Option<bool>(new string[]{ "--regex-option" ,"-regex"},"Use regex"),
                new Option<bool>(new string[]{ "--htmlagilitypack-option", "-agpack"},"Use HtmlAgilityPack"),
                new Option<bool>(new string[]{ "--anglesharp-option", "-agsharp"},"Use AngleSharp"),
                new Option<string>(new string[]{ "--download-path" ,"-path"},"Designate download path"),13             };

說明:

可通過Option類的構造函數重載,為Option指定默認值。

public Option(string alias, Func<T> getDefaultValue, string? description = null);

如上面的-path Option,指定默認值為D:\download,如下:

 new Option<string>(new string[]{ "--download-path" ,"-path"},getDefaultValue:()=>"D:\\download","Designate download path"),

也可以先實例化RootCommand對象,再通過Add的方式添加Argument和Option,如下:

var rootCommand = new RootCommand();
 //添加 Argument
rootCommand.AddArgument(new Argument<string>("url","web site url"));
//添加 Option
rootCommand.AddOption(new Option<string>(new string[] {"--download-path","-path" },"download path"));

4、添加當前命令行程序的描述信息

C#命令行參數解析庫System.CommandLine的使用方法

rootCommand.Description = ".Net Core command-line crawler.";

5、解析Argument和Option

rootCommand.Handler = CommandHandler.Create<string, bool, bool, bool, bool, bool, string>((string url, bool html, bool image, bool regex, bool agpack, bool agsharp, string path) => {
                
            });

如果覺得參數太長,可以封裝成類,再進行調用,如下:

public class CrawlerOption
    {
        public string Url { get; set; }
        public bool GetHtml { get; set; }
        public bool GetImage { get; set; }
        public bool RegexOption { get; set; }
        public bool HtmlagilitypackOption { get; set; }
        public bool AnglesharpOption { get; set; }
        public string DownloadPath { get; set; }
    }
rootCommand.Handler = CommandHandler.Create<CrawlerOption>((crawlerOption) =>
            {

            })

6、添加Command并為Command添加處理函數

 //添加 Command
             var githubCommand = new Command("github", "fork me on github");
             //添加 Command的處理函數
             githubCommand.Handler = CommandHandler.Create(() => { System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo("cmd", $"/c start https://github.com/zhaotianff/Crawler-Line")); });
             //將Command添加 到RootCommand
            rootCommand.AddCommand(githubCommand);

說明:

1、RootCommand是頂級命令,RootCommand可以添加Command,Command又可以再添加SubCommand。如此可以無限循環,沒有限制 。但建議還是不要添加太多級的Command,調用的時候會不太友好

2、Command和RootCommand原理一樣,如果需要為Command添加Argument、Option和Command,可以參照前面的示例

7、調用解析

return rootCommand.InvokeAsync(args).Result;

8、調用示例

#執行github command
crawler-line.exe github
#執行github subcommand
crawler-line.exe github sub
#執行argument option
crawler-line.exe http://www.baidu.com -path "D:\test"

特別提示:

前面示例中,都是為RootCommand添加的Argument和Option,如果又指定 -path(Option),又執行github(Command)肯定會失敗。因為github這個命令是RootCommand的子命令,而-path選項是為RootCommand添加的

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C#命令行參數解析庫System.CommandLine的使用方法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

苏尼特左旗| 江源县| 永新县| 岗巴县| 万荣县| 天等县| 广宗县| 堆龙德庆县| 洪洞县| 临邑县| 石首市| 兴化市| 上思县| 富锦市| 安阳市| 宁安市| 叙永县| 阜城县| 称多县| 永吉县| 铜山县| 新密市| 龙岩市| 彭山县| 达州市| 南岸区| 错那县| 石屏县| 遂平县| 双江| 祁连县| 白水县| 理塘县| 建始县| 克拉玛依市| 红河县| 浙江省| 儋州市| 灵寿县| 临海市| 沐川县|