.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
.Net框架的模块代码生成器--其三(dotnet tool指令的参数)的更多相关文章
- .Net框架的模块代码生成器--其二(dotnet tool)
以下是个人工作场景,继上篇后,还剩下第3步骤没有解决 3.(这个可能我们公司才有)每个模型还要在每一层那里创建一个文件,这个模型的增删改查逻辑就在这里写 这个我是自己写一个.Net Core命令行工具 ...
- .Net框架的模块代码生成器--其一(dotnet new)
小白教程声明,首先先介绍一下.Net 框架及模块是什么情况: 1.公司的大佬会把框架的代码打包成Nuget包放在公司的服务器上 2.公司会专门开一个git仓库,存储模块的代码,每个模块都有其独立的文件 ...
- Qt框架及模块认识
小白自工作就接触Qt,一直都在使用Qt5.3.1版本,所以没有经历过大牛们把项目从Qt4程序到Qt5的烦恼,没准以后会碰到.对Qt所有的丰富的API表示惊叹,对于Qt的框架及模块认识也是极为模糊的,文 ...
- .NET Core 跨平台资源监控库及 dotnet tool 小工具
目录 简介 dotnet tool 体验 CZGL.SystemInfo SystemPlatformInfo ProcessInfo 内存监控 NetworkInfo DiskInfo 简介 CZG ...
- (三):C++分布式实时应用框架——系统管理模块
C++分布式实时应用框架--系统管理模块 上篇:(二): 基于ZeroMQ的实时通讯平台 一个分布式实时系统集群动辄上百台机器,集群的规模已经限定这将是一个"封闭"的系统.你不可能 ...
- .NET CORE 框架ABP的代码生成器(ABP Code Power Tools )使用说明文档
前言 各位好,又是一个多月没更新文章了. 原因嘛,大家都懂的,太忙了~ 临近年末,公司的项目.年会的做技术支持,同事朋友聚餐也比较频繁. 当然视频教程也没有继续更新.我的锅~ 但是这个月好歹抽空做了一 ...
- jQuery系列 第八章 jQuery框架Ajax模块
第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是Ajax实现的关键,发送异步请求.接收服务器端的响应以及执 ...
- SSH框架分模块开发
------------------siwuxie095 SSH 框架分模块开发 1.在 Spring 核心配置文件中配置多个内容,容易造成 配置混乱,不利于维护 「分模块开发主要针对 Spring ...
- VUE框架概括+模块语法使用(上)
vue是什么 官网(https://cn.vuejs.org/) Vue.js是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计: Vue 的核心库只关注视图 ...
随机推荐
- 个人第4次作业:Alpha测试
这个作业属于哪个课程 课程 这个作业要求在哪里 作业要求 团队名称 CTRL-IKun 一.测试人员个人信息 姓名 王川 学号 201731021132 所在团队 CTRL-IKun 二.测试情况及结 ...
- 创建dynamics CRM client-side (二) - Client API
如果我们想用script来直接在form上做一些修改, 我们需要用到client api 来做交互. 我们可以用以下来理解: Form <---> Client API <---&g ...
- Python3-提高效率的方法
1.字符串格式化 Python3.7或以上推荐使用f-string,其他版本推荐使用format方法. 2.字典的初始化 使用字面量初始化字典(以及其他集合类型). 说明:Python中初始化集合类型 ...
- mysql--->mysql的事务和锁
mysql 事务和锁 什么是事务?及其特性? 答:事务:是一系列的数据库操作,是数据库应用的基本逻辑单位. 或者这样理解: 事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操 ...
- Docker扩展内容之容器开机自启
前言 部署项目服务器时,为了应对停电等情况影响正常web项目的访问,会把Docker容器设置为开机自动启动. 在使用docker run启动容器时,使用--restart参数来设置,具体参数如下详解 ...
- Linux下启动/关闭Oracle
一.Linux下启动Oracle Linux下启动Oracle分为两步: 1)启动监听: 2)启动数据库实例: 1.登录服务器,切换到oracle用户,或者以oracle用户登录 [admin@dat ...
- C++使用类调用CUDA核函数
正如CUDA C所称,CUDA对C语言进行了很好的扩展,直接使用C语言可以非常简单方便的调用CUDA核函数.但是当想使用C++的类成员函数直接调用核函数是不可行的,第一,核函数不能作为类的成员函数,第 ...
- css- :before :after
:before和:after的作用就是在指定的元素内容(而不是元素本身)之前或者之后插入一个包含content属性指定内容的行内元素,最基本的用法如下: #example:before { conte ...
- 1.3.4分析你的第一个Android程序——Android第一行代码(第二版)笔记
切换项目结构模式 Project模式的项目结构 我们将项目切换成Project模式,这就是真实的目录结构. .gradle和.idea 这两个目下放置的都是Android Studio自动生成的一些文 ...
- 自动化测试用例中的raise
1.一次自动化测试学习中,expect异常中包含“raise e”,这是什么意思呢? 2.网上查了一下,大概意思是:若有异常,不会执行一下的操作,但是明明是语句后确实没有其他语句呀. 3.注释掉之后, ...