上海手机网站案例,几级分销是合法的,哈尔滨市建设工程交易中心网站,老牌网站建介绍一个命令行的实现库#xff0c;可以优雅而简单的实现命令行应用。前言控制台应用 Console#xff0c;在我们开发中用处很多。小到一个简单的功能测试#xff0c;或一组不需要复杂 UI 的工具类应用#xff0c;大到后端的服务#xff0c;都会用到 Console。在这里面可以优雅而简单的实现命令行应用。 前言控制台应用 Console在我们开发中用处很多。小到一个简单的功能测试或一组不需要复杂 UI 的工具类应用大到后端的服务都会用到 Console。在这里面命令行应用 Cli又是非常典型的一个应用类型。 命令行应用通常概念上需要我们输入一定参数根据参数的不同选择不同的程序流程或方法来执行。举个简单的例子% python3
Python 3.9.0 (default, Nov 13 2020, 12:12:14)
[Clang 12.0.0 (clang-1200.0.32.21)] on darwin
Type help, copyright, credits or license for more information.import OS
Traceback (most recent call last):File stdin, line 1, in module
ModuleNotFoundError: No module named OSimport osprint(Hello WangPlus)
Hello WangPlusexit()
不需要管 python3 是什么这不重要。我们能看到当进入一个命令行时一般首先会有简单的功能介绍然后是一个提示符在这里是 。然后可以输入命令和参数如果输入正确会有错误提示。如果输入正确会有适当的输出。 通常如果想实现这样的效果我们需要一个大的循环来解析和响应输入的命令和参数然后进行对应的处理。事实上在做这样一个应用时会有很大的精力来处理这个循环。不相信的话可以自己试着写一写。 今天给大家介绍的是一个库Nuget 上的库也是我最近无意中发现的但给了我很大的惊喜。事实上我自己在写应用时如果有可能我会优先采用 Console 或 Cli 的方式来写轻量、快速不用处理太多 UI 方面的工作。这个库叫 CommandLineTool。下面进入正题我从头介绍一下这个库的使用。创建项目先来创建项目。老习惯用命令行创建% dotnet new console -o demo -f net5.0
这儿需要注意一下这个库目前支持到 Dotnet Core 5.0所以我们就用 5.0 了。然后引入 CommandLineTool% dotnet add package CommandLineTool
就这样工程就算是建完了。实现功能这个库最简单的地方是实现起来非常简单。第一步先建一个类这个类就是我们要实现 Cli 命令行功能的类 TestCLI[App(Demo)]
public class TestCLI
{
}
类是空的先不管它。第二步在 Program.cs 里加入这个类class Program
{static void Main(string[] args){Cli cli new Cli(typeof(TestCLI)){Introduction 这是一个 Demo 应用,PromptText WangPlus,};cli.SetCancellationKeys(new() { exit });cli.Start();}
}
看一个加入的内容Introduction - 这个 Cli 的说明提示一下这个程序的功能随便写PromptText - 这个是提示符的内容类似于最上面例子的 下面这一句cli.SetCancellationKeys(new() { exit });是定义了退出的命令。也就是说在提示符后输入 exit应用就退出了。 跑一下这个应用% dotnet demo.dll
这是一个 Demo 应用WangPlus was not matched. Did you mean -h?
Unrecognized command or argument demoDemoUsage:demo [options]Options:--version Show version information-?, -h, --help Show help and usage informationWangPlus exit
Terminating console...
哇哈哈一个简单的 Cli 架子搭出来了。第三步开始写命令处理命令处理放在 TestCLI.cs 中。[App(Demo)]
public class TestCLI
{[Command(hello, 就是打个招呼)]public static void Hello([ParamArgument()] string name){Console.WriteLine($Hello {name});}
}
方法还是我们非常熟悉的一个普通方法并没有什么特别的。再跑一下WangPlus hello
Required argument missing for command: hellohello就是打个招呼Usage:demo [options] hello nameArguments:nameOptions:-?, -h, --help Show help and usage informationWangPlus hello wang
Hello wang
出来效果了。重点看一下代码里的几个部分属性 Command里面两个参数第一个参数就是我们要实现的命令第二个参数是命令的说明。方法里[ParamArgument()] 表示后面跟的参数来自于输入的命令的参数。 下面还有几种形式//多个参数
[Command(multiinput, 多个参数)]
public static void MultiInput([ParamArgument()] Liststring names) {}//多个文件
[Command(multifile, 多个文件)]
public static void MultiFile([ParamArgument()] ListFileInfo files) {}//额外的参数
[Command(withpara, 额外参数)]
public static void WithPara([ParamArgument()] string names, [ParamOption(-a)] string op1) {}
重点说一下额外参数的方式。有时候我们可能需要下面的方式来处理命令% demo -a a-value -b b-value command
这个方式就是来解决这样的问题的。 有没有 Get 到爽点本文有配套代码在 https://github.com/humornif/Demo-Code/tree/master/0053/demo喜欢就来个三连让更多人因你而受益