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


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

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

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

    帮助信息

    image

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

    这个是必不可少的。

    子命令

    一个应用程序打包了多个功能,这时候就可以使用子命令,比如 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命令。

    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版。

  • 相关阅读:
    Beta冲刺阶段
    用例图练习
    第四次作业--个人作业--必应词典案例分析
    第五次作业——团队项目——需求规格说明书
    结对编程第三次作业
    第二次作业— —结对项目
    Git使用心得
    Android平台的开发环境的发展演变
    软件工程的实践项目的自我目标
    面试中遇到的问题
  • 原文地址:https://www.cnblogs.com/ants/p/8615958.html
Copyright © 2020-2023  润新知