使用.NET Core快速开发一个较正规的命令行应用程序

一般命令行程序包含什么?

  1. 使用方式

  2. 帮助信息

  3. 子命令

  4. 参数

  5. 选项

帮助信息

帮助信息如上,介绍了命令的作用和参数、选项作用。

这个是必不可少的。

子命令

一个应用程序打包了多个功能,这时候就可以使用子命令,比如 dotnet ef migrations,这时候 migrations 就是子命令,可以看做本来可以拆分成多个可执行程序的东西,用一个可执行程序来打包完成,子命令可以再次具有自己的帮助、参数和选项。

参数

参数在形式上有点类似子命令,比如 cat hello.txt 这边的hello.txt就是一个参数,参数一般是命令中必须存在的内容。比如 cat 命令,没有输入路径则没法执行任何任务。

选项

选项是指可选项,用来扩展命令。比如删除时是否需要输出被删除的文件?是否删除文件夹?是否递归删除?等等。


如何用.NET Core快速开发一个命令行程序?

CommandLineUtils Packages

今天的主角,这边包主要就是用来做命令行程序的。

说起这个包的历史,还是比较曲折的。

这个包原是aspnet团队提供的,开源项目在

https://github.com/aspnet/Common

但是大家可以发现在现在的仓库的src中已经没有了 CommandLineUtils 这个项目。

翻看历史我们可以发现 Microsoft.Extensions.CommandLineUtils 这个项目

https://github.com/aspnet/Common/tree/rel/1.1.1/src/Microsoft.Extensions.CommandLineUtils

同时nuget上还是有这个packages的。

https://www.nuget.org/packages/Microsoft.Extensions.CommandLineUtils/

由于这个项目是满足内需的(ef migrations,等命令)所以MS并不打算长期发展这个项目。所以MS推荐社区来维护一个类似的项目。

那么就有很多热心的人开始接力的

https://github.com/natemcmaster/CommandLineUtils(MS官方链接)

这个库在基础功能上还增加了

  1. Attribute API(用Attribute来简化编写)

  2. ArgumentEscaper(参数转义)

  3. Prompt(获得输入相关的帮助,用户输入 yes or no,获取一串输入密码)

  4. DotNetExe(得到dotnet.exe的路径)


实现一个简单的cat命令

好了我们介绍了一般命令行程序的构成,下面我们来用.NETCore来实现一个简化版的cat命令。

new CommandLineApplication

Name:命令名称

Description:命令描述

app.HelpOption("-h|--help")

设置含有帮助选项,触发方式为 –h 或者 —help,这边用 | 分隔。

app.Argument("path", "file")

设置一个参数,参数名为 path,描述为file。还可以设置参数是否允许多个等。

app.Option

设置了两个选项,选项的触发方式与HelpOption一致,后面一个参数是说明。还可以配置这个参数是否有值(是否只是开关),是否只有一个值,是否允许多个值等。

app.OnExecute

命令的具体执行逻辑。

app.Execute

与主程序对接,真正的执行者。

逻辑1,参数验证与转换

逻辑2,具体的输出

发布、测试

使用自宿主的方式发布一个win-x64的应用。

具体的发布方式可以看官网文档

https://docs.microsoft.com/zh-cn/dotnet/core/deploying/


写在最后

我们来瞅一瞅发布后的文件夹

是不是太夸张,其实这种简单的程序,我们可以这样子

这个我们就留着后面介绍吧,有兴趣的可以先去了解下“CoreRT”

https://github.com/dotnet/corert

.NET Core的AOT项目,目前还是alpha版。

原文:https://www.cnblogs.com/ants/p/8615958.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客-乃爱与城市拥挤程度【树形dp】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1100/B 题目大意 nnn个点的一棵树,对于每个点求 距离该点不超过kkk的点数每个点的权值是以该点为起点长度所有不超过kkk的路径覆盖该点的次数,求所有点的乘积 解题思路 对于第一问我们先考虑在子树…

SpringBoot2.1.9 MongoDB的聚合连接

LookupOperation lookupOperation LookupOperation.newLookup().from(AdminRepository.instance().getTableName()). //关联从表名localField(User.Fields.name). //主表关联字段foreignField(Admin.Fields.name).//从表关联的字段as("adminInfo"); //查询结果…

节操大师 北方大学生程序设计竞赛 南开大学

Description MK和他的小伙伴们(共n人,且保证n为2的正整数幂)想要比试一下谁更有节操,于是他们组织了一场节操淘汰赛。他们的比赛规则简单而暴力:两人的节操正面相撞,碎的一方出局,而没碎的一方晋…

牛客-仓鼠的石子游戏【博弈论】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1100/A 题目大意 nnn个环,第iii个环有aia_iai​个珠子。要求涂色时没有相邻的同色。 两个人轮流涂色,直到一个人无法涂色为止。 解题思路 其实先手后手的胜利与他们的操作没有任何关系。 考虑一个…

Window7 docker安装

一、下载docker toolbox docker-toolbox-windows-docker-toolbox安装包下载_开源镜像站-阿里云 -ce后缀的是免费的版本,其他是收费版本 二、安装 安装完成即可 三、启动docker 双击 Docker Quickstart Terminal启动 其他问题: 启动拉boot2docker镜像失…

aspnetcore.webapi实践k8s健康探测机制 - kubernetes

1、浅析k8s两种健康检查机制Liveness k8s通过liveness来探测微服务的存活性,判断什么时候该重启容器实现自愈。比如访问 Web 服务器时显示 500 内部错误,可能是系统超载,也可能是资源死锁,此时 httpd 进程并没有异常退出&#xff…

dp 树状数组 逆序元组

wmq的队伍 发布时间: 2017年4月9日 17:06 最后更新: 2017年4月9日 17:07 时间限制: 2000ms 内存限制: 512M 描述 交大上课需要打卡,于是在上课前的几分钟打卡机前往往会排起长队。 平时早睡早起早早打卡的wmq昨晚失眠,今天起晚了,于是他…

牛客-服务器需求【线段树】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1101/A 题目大意 nnn天第iii天需要aia_iai​台机器,每台机器可以工作mmm天。qqq次修改,每次修改一个aia_iai​,求每次修改后至少需要雇佣多少台机器。 解题思路 很容易想到答案就是max{…

快速搭建CentOS+ASP.NET Core环境支持WebSocket

以前用python,go尝试在linux下做web服务,python没有强类型支持与高性能,go又没有很好的集成开发环境(还有强迫症的语法),回头看了几次.net,都没有时间尝试,现终于实现了这些想法&…

博客文章列表(一)——JAVA

一、成长系列 面试 详情列表 编程难题 详情列表 java总结 详情列表 java技能 详情列表 java面…

Cube Or 北方大学生训练赛

Cube Or Time Limit: 2000/2000 MS(Java/Others) Memory Limit: 262144/262144 K(Java/Others) Problem Description : Given you N Integers ai (1≤i≤N) , you can do thefollowing operation: pick out …

牛客-沙漠点列【tarjan】

正题 题目链接:https://ac.nowcoder.com/acm/contest/1101#question 题目大意 nnn个点mmm条边的沙漠(所有联通子图都是仙人掌),删除kkk个点使得剩下的连通块最多。 解题思路 对于图上的每条割边,删去之后就可以多出一个联通块,所以我们就可…

来自后端的突袭? --开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor

在今年年初, 恰逢新春佳节临近的时候. 微软给全球的C#开发者们, 着实的送上了一分惊喜. 微软正式开源Blazor ,将.NET带回到浏览器.这个小惊喜, 迅速的在dotnet开发者中间传开了. 而就在昨天(2018年3月22日) Blazor发布了它的第一次Release. Blazor到底是个什么样的东…

博客文章列表(二)——算法、数据结构、数据库、ABCD

七、编程基础 数据结构 详情列表 算法 详情列表 算法.排序 详情列表 算法.加密 详情列…

A*B NTT快速数论变换

wmq的AB Problem 发布时间: 2017年4月9日 17:06 最后更新: 2017年4月9日 17:07 时间限制: 3000ms 内存限制: 512M 描述 这是一个非常简单的问题。 wmq如今开始学习乘法了!他为了训练自己的乘法计算能力,写出了n个整数,并且对每两个数a,…

51nod-猴猴吃苹果【线段树】

正题 题目链接:https://www.51nod.com/Contest/ProblemList.html#contestId188&randomCode291765 题目大意 nnn个点的一棵树,从kkk节点出发,每次走到最远的一个节点(路上点最多,如果有多个就编号最小的)并将路上的点权变为0,求会依次到达…

北方大学 ACM 多校训练赛 第十五场 蜘蛛牌A

题目描述 XCX最近迷上了玩蜘蛛牌。蜘蛛牌是windowsxp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比它大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也…

dotnet watch+vs code提升asp.net core开发效率

在园子中,已经又前辈介绍过dotnet watch的用法,但是是基于asp.net core 1.0的较老版本来讲解的,在asp.net core 2.0的今天,部分用法已经不太一样,所以就再写一篇文章来介绍dotnet watch vs code来提升asp.net core开发…

51nod-猴猴吃香蕉【dp】

正题 题目链接:https://www.51nod.com/Contest/Problem.html#contestProblemId1149 题目大意 nnn个数,求有多少种选择方案使选择的数乘机为kkk。 解题思路 显然kkk的质因数最多只有999个,我们将质因数进行dpdpdp。若选择的数的质因数刚好是kkk的质因数…

北方大学 ACM 多校训练赛 第十五场 数字游戏

本题的意思是,给你1/2,1/2,1,2,4……2^(k-1) ,让你在左边的数列中添加号或者-号,使得最终的答案为n即可。 思路: 我们知道上面这些数直接如果全部都填号的话…