C#命令行参数解析库System.CommandLine使用_第1页
C#命令行参数解析库System.CommandLine使用_第2页
C#命令行参数解析库System.CommandLine使用_第3页
C#命令行参数解析库System.CommandLine使用_第4页
C#命令行参数解析库System.CommandLine使用_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C#命令行参数解析库System.CommandLine使用平常在日常的开发过程中,会经常用到命令行工具。如cmd下的各种命令。

以下为sc命令执行后的截图,可以看到,由于没有输入任何附带参数,所以程序并未执行任何操作,只是输出了描述和用法。

系统在创建一个新进程时,会传一个命令行给它,也就是命令行字符串。

程序需要对命令行字符串进行解析,并执行相应操作。

如使用scquery可以查询当前系统的服务:

在C#中的控制台程序中,Main函数中传入的args字符串数组,就是系统传入进程的命令行参数。

在构建具有复杂命令行参数的控制台程序时,手动解析参数就变得非常麻烦。这里推荐一个开源的库,可以更加方便的解析命令行参数。

System.CommandLine介绍

System.CommandLine是一个基于.NetStandard2.0(支持.NetFrameWork+和.NetCore2.0+)的命令行参数解析库,项目地址/dotnet/command-line-api,目前,该项目还是属于beta状态,期待以后的正式版本。

由于不是正式版本,在Nuget中引用时,需要钩上Includeprerelease,才能找到这个包。

System.CommandLine的一些基本概念

Token(标记)

命令行的每个单词都是一个标记,如下面的"sc"、"query"和"eventlog"都是一个Token

Commands(命令)

Commands就是应用程序根据Token执行相应的操作(在System.CommandLine库中,对应Command类)

RootCommand(根命令)

根命令是代表可执行程序本身的Commands,如sc(在System.CommandLine库中,对应RootCommand类)

SubCommands(子命令)

一些命令行程序会有SubCommands,如上面的scquery中的query就是子命令(在System.CommandLine,对应Command类)

Options(可选项)

Options就是传递给Commands的命名参数,如app-myoption123中的-myoption123就是一个Options

Argument(参数)

参数就是传递给选项或命令的值。

说明:

常规的调用如下:

xx.exe[options]argument[command]

Delimiters(分隔符)

分隔符就是把Options的命令和值分开的符号

如下三种写法都是一样的,可以使用空格、=或:符号

app-myoption123

app-myoption=123

app-myoption:123

Aliases(别名)

可以为命令或选项设置较短的别名,如

-v,--verbose

--o,--option

System.CommandLine使用

在下面的示例中,我们会构建一个简单的控制台爬虫工具。

1、使用VisualStudio2025创建一个.NetCore控制台程序crawler-line

2、导入System.CommandLine包

3、创建一个RootCommand

varrootCommand=newRootCommand

newArgumentstring(

"url","websiteurl"),

newOptionbool(newstring[]{"--gethtml","-html"},"Gethtmlsource"),

newOptionbool(newstring[]{"--getimage","-image"},"Getimages"),

newOptionbool(newstring[]{"--regex-option","-regex"},"Useregex"),

newOptionbool(newstring[]{"--htmlagilitypack-option","-agpack"},"UseHtmlAgilityPack"),

newOptionbool(newstring[]{"--anglesharp-option","-agsharp"},"UseAngleSharp"),

newOptionstring(newstring[]{"--download-path","-path"},"Designatedownloadpath"),13};

说明:

可通过Option类的构造函数重载,为Option指定默认值。

publicOption(stringalias,FuncTgetDefaultValue,stringdescription=null);

如上面的-pathOption,指定默认值为D:\download,如下:

newOptionstring(newstring[]{"--download-path","-path"},getDefaultValue:()="D:\\download","Designatedownloadpath"),

也可以先实例化RootCommand对象,再通过Add的方式添加Argument和Option,如下:

varrootCommand=newRootCommand();

//添加Argument

rootCommand.AddArgument(newArgumentstring("url","websiteurl"));

//添加Option

rootCommand.AddOption(newOptionstring(newstring[]{"--download-path","-path"},"downloadpath"));

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

rootCommand.Description=".NetCorecommand-linecrawler.";

5、解析Argument和Option

rootCommand.Handler=CommandHandler.Createstring,bool,bool,bool,bool,bool,string((stringurl,boolhtml,boolimage,boolregex,boolagpack,boolagsharp,stringpath)={

});

如果觉得参数太长,可以封装成类,再进行调用,如下:

publicclassCrawlerOption

publicstringUrl{get;set;}

publicboolGetHtml{get;set;}

publicboolGetImage{get;set;}

publicboolRe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论