别人已经写好了一个这种处理指令参数的库,我们这里是使用别人的库来实现规范的指令系统

继续上一篇的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

.Net框架的模块代码生成器--其三(dotnet tool指令的参数)的更多相关文章

  1. .Net框架的模块代码生成器--其二(dotnet tool)

    以下是个人工作场景,继上篇后,还剩下第3步骤没有解决 3.(这个可能我们公司才有)每个模型还要在每一层那里创建一个文件,这个模型的增删改查逻辑就在这里写 这个我是自己写一个.Net Core命令行工具 ...

  2. .Net框架的模块代码生成器--其一(dotnet new)

    小白教程声明,首先先介绍一下.Net 框架及模块是什么情况: 1.公司的大佬会把框架的代码打包成Nuget包放在公司的服务器上 2.公司会专门开一个git仓库,存储模块的代码,每个模块都有其独立的文件 ...

  3. Qt框架及模块认识

    小白自工作就接触Qt,一直都在使用Qt5.3.1版本,所以没有经历过大牛们把项目从Qt4程序到Qt5的烦恼,没准以后会碰到.对Qt所有的丰富的API表示惊叹,对于Qt的框架及模块认识也是极为模糊的,文 ...

  4. .NET Core 跨平台资源监控库及 dotnet tool 小工具

    目录 简介 dotnet tool 体验 CZGL.SystemInfo SystemPlatformInfo ProcessInfo 内存监控 NetworkInfo DiskInfo 简介 CZG ...

  5. (三):C++分布式实时应用框架——系统管理模块

    C++分布式实时应用框架--系统管理模块 上篇:(二): 基于ZeroMQ的实时通讯平台 一个分布式实时系统集群动辄上百台机器,集群的规模已经限定这将是一个"封闭"的系统.你不可能 ...

  6. .NET CORE 框架ABP的代码生成器(ABP Code Power Tools )使用说明文档

    前言 各位好,又是一个多月没更新文章了. 原因嘛,大家都懂的,太忙了~ 临近年末,公司的项目.年会的做技术支持,同事朋友聚餐也比较频繁. 当然视频教程也没有继续更新.我的锅~ 但是这个月好歹抽空做了一 ...

  7. jQuery系列 第八章 jQuery框架Ajax模块

    第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是Ajax实现的关键,发送异步请求.接收服务器端的响应以及执 ...

  8. SSH框架分模块开发

    ------------------siwuxie095 SSH 框架分模块开发 1.在 Spring 核心配置文件中配置多个内容,容易造成 配置混乱,不利于维护 「分模块开发主要针对 Spring ...

  9. VUE框架概括+模块语法使用(上)

    vue是什么 官网(https://cn.vuejs.org/) Vue.js是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计: Vue 的核心库只关注视图 ...

随机推荐

  1. HGE引擎改进——2014/3/4

    2014/3/4 更新 1.提升资源包管理效率 2.Show库整合.目前Show库有Picture.Frame.Animation和Particle类,以及PictureData和ParticleSy ...

  2. SpringBoot_Web开发_定制错误数据

    SpringBoot默认的错误处理机制 默认效果: ​ 1).浏览器,返回一个默认的错误页面 2).如果是其他客户端,默认响应一个json数据 原理: ​ 可以参照ErrorMvcAutoConfig ...

  3. [NOI2005]维护数列(区间splay)

    [NOI2005]维护数列(luogu) 打这玩意儿真是要了我的老命 Description 请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线‘ _ ’表示实际输入文 ...

  4. ios---运用MJRefresh组件设置下拉刷新

    #import "XMGTopicViewController.h" #import <AFNetworking.h> #import <MJExtension. ...

  5. hashlib 模块的用法

    import hashlib #多用于加密a=hashlib.md5()print(a) #<md5 HASH object @ 0x00000000021CCF90> a.update( ...

  6. kubernetes secret 和 serviceaccount删除

    背景 今天通过配置创建了一个serviceaccounts和secret,后面由于某种原因想再次创建发现已存在一个serviceaccounts和rolebindings.rbac.authoriza ...

  7. python接口自动化测试 - 数据驱动DDT模块的简单使用

    DDT简单介绍 名称:Data-Driven Tests,数据驱动测试 作用:由外部数据集合来驱动测试用例的执行 核心的思想:数据和测试代码分离 应用场景:一组外部数据来执行相同的操作 优点:当测试数 ...

  8. qt creator源码全方面分析(2-1)

    目录 coding-style.html 提交代码 二进制兼容性和源代码兼容性 代码构造 格式化 利用标识符 空格 大括号 圆括号 换行符 声明 命名空间 模式与实践 命名空间 传递文件名 插件扩展点 ...

  9. python学习Day04--列表

    [主要内容] 1.列表的索引: lst=[1,2,3,4,5,6] print(lst[0])      #获取第一个元素 lst[1]='你好'    #改变列表中的值 2.列表的切片: lst=[ ...

  10. Django自动化测试平台项目案例

    引言 在项目组待了近半年时间,根据自己的感受和体验,做了一个辅助测试的工具(数据预报平台),主要目的是针对目前项目接口文档缺失,自动化预报脚本无法可视化,资源循环利用,统一管理化. 业务背景 我们项目 ...