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

程序员的世界,命令行工具一直是“体验很是友好”的工具,也能自动化完成不少事情,同时还能结合shell来进行某项任务的批处理(脚本)。在.NET Core中,命令行应用程序是基础,可是如何实现像 “cat” 这种功能呢?今天就为你们介绍一个packages来优雅的实现一个命令行应用程序。git

通常命令行程序包含什么?

  1. 使用方式
  2. 帮助信息
  3. 子命令
  4. 参数
  5. 选项

帮助信息

image

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

这个是必不可少的。github

子命令

一个应用程序打包了多个功能,这时候就可使用子命令,好比 dotnet ef migrations,这时候 migrations 就是子命令,能够看作原本能够拆分红多个可执行程序的东西,用一个可执行程序来打包完成,子命令能够再次具备本身的帮助、参数和选项。shell

参数

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

选项

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

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

CommandLineUtils Packages

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

提及这个包的历史,仍是比较曲折的。命令行

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

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命令。

image

new CommandLineApplication

Name:命令名称

Description:命令描述

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

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

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

设置一个参数,参数名为 path,描述为file。还能够设置参数是否容许多个等。

app.Option

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

app.OnExecute

命令的具体执行逻辑。

app.Execute

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

逻辑1,参数验证与转换

image

逻辑2,具体的输出

image

发布、测试

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

具体的发布方式能够看官网文档

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

image

image

写在最后

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

image

是否是太夸张,其实这种简单的程序,咱们能够这样子

image

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

https://github.com/dotnet/corert

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

相关文章
相关标签/搜索