.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 的核心库只关注视图 ...
随机推荐
- 文件上传二:FormData上传
介绍三种上传方式: 文件上传一:伪刷新上传 文件上传二:FormData上传 文件上传三:base64编码上传 Flash的方式也玩过,现在不推荐用了. 真正的异步上传,FormData的更多操作,请 ...
- js解析json时报:Unexpected token s in JSON at position 0
原因肯定是返回的json格式有问题 最有可能是后台在程序执行过程中,输出了某些调试信息等等,这些输出的字符串和json拼接成了新的字符串来解析,这时就会报错: 比如我在入口文件里var_dump了__ ...
- pku-3321 Apple Tree(dfs序+树状数组)
Description There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow ...
- Docker三剑客之compose
简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排.从功能上看,跟 OpenStack 中的 Heat 十分类似.其代码目前在 https://g ...
- 用 C# 写一个 Redis 数据同步小工具
用 C# 写一个 Redis 数据同步小工具 Intro 为了实现 redis 的数据迁移而写的一个小工具,将一个实例中的 redis 数据同步到另外一个实例中.(原本打算找一个已有的工具去做,找了一 ...
- 五、spring源码阅读之ClassPathXmlApplicationContext加载beanFactory
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml&q ...
- printf的用法进阶
今天来好好总结一下C语言中关于printf的常用用法 基础部分 printf("%d\n", numInt); printf("%f\n", numFloat) ...
- myeclipse 项目引入 com.sun.image.codec.jpeg 的api报错解决方法
今天在做压缩图片的功能的时候发现JDK自带的jar找不到的问题,网上找到一个方法,实测可行,这边记录下: 在Eclipse中处理图片,需要引入两个包: import com.sun.image.c ...
- java核心技术----Object类
package java.lang; /** * Class {@code Object} is the root of the class hierarchy. * Every class has ...
- TensorFlow中使用GPU
TensorFlow默认会占用设备上所有的GPU以及每个GPU的所有显存:如果指定了某块GPU,也会默认一次性占用该GPU的所有显存.可以通过以下方式解决: 1 Python代码中设置环境变量,指定G ...