.Net框架的模块代码生成器--其三(dotnet tool指令的参数)
别人已经写好了一个这种处理指令参数的库,我们这里是使用别人的库来实现规范的指令系统
继续上一篇的gfile或者新建一个.Net Core控制台程序也可以
1、安装nuget包,程序包管理器控制台运行
Install-Package McMaster.Extensions.CommandLineUtils
2、编写代码,以下是代码模板
private static CommandLineApplication _app; private static CommandOption _entity; private static CommandOption _version; private static readonly string Version = "1.0.4"; static void Main(string[] args) { _app = new CommandLineApplication(); _entity = _app.Option("-e|--entity", "Add The Entity And Related Cs File", CommandOptionType.MultipleValue); _version = _app.Option("-v|--version", "Show Version Of The Tool", CommandOptionType.NoValue); //给所有子命令添加帮助选项 _app.HelpOption(inherited: true); _app.OnExecute((Action) Codegen); try { _app.Execute(args); } catch (Exception e) { Console.WriteLine(e.Message); } } private static void Codegen() { if (_version.Values.Any()) { Console.WriteLine(Version); return; } //其他代码 }
注意要引用命名空间McMaster.Extensions.CommandLineUtils;
下面解释代码:
_app相当于是一个可以识别和处理你的程序入参的对象
_app.Option可以给指令增加配置项,就是我们用别人指令时这样的,如dotnet tool install --global --add-source ./nupkg GenerateCsFile
这里的--global就是一个配置项,这个配置项没有参数,--add-source又是另一个配置项,这个配置项有一个参数./nupkg GenerateCsFile
使用这个方法时,第一个入参指示这个配置项名字,一般-XX和--XXX是等价的,第二个是说明文字,使用帮助文档时给用户看到的内容,第三个CommandOptionType确定这个配置需不需要参数需要几个参数
这个方法的返回值是CommandOption对象,当执行_app.Execute()开始解析参数时,这个对象将从解析到的参数中获得相应的值,在values(字符串数组)中可以拿到,有以下几种情况
1)如--add-source 的参数有一个./nupkg GenerateCsFile,那么Values数组中有一个字符串“./nupkg GenerateCsFile”;
2)如果是多个参数的必须要这样传 cfile -e AAA -e BBB 那么_entity.Values这个数组有两个元素
3)如果是没参数的,Values数组有一个null元素
4)如果没有传这个配置的,Values数组没有元素
_app.OnExecute指示当执行_app.Execute()开始解析参数时,要执行的代码,也就是主要的业务代码
_app.Execute解析传入的参数args(总所周知,执行dotnet run 时可以隔一个空格写一个任意字符串,这些个字符串都会放在args中)
3、调试代码,有两种方式,
一种是在项目的目录下使用命令行dotnet run -e XXX -e YYY -v
一种是在VS中,右击这个项目->属性,有个调试,可以在里面这样写,写完保存按F5就可以直接调试了
参考文档 https://natemcmaster.github.io/CommandLineUtils/docs/intro.html