前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET Core使用命令行参数库构建控制台应用程序

.NET Core使用命令行参数库构建控制台应用程序

原创
作者头像
HueiFeng
修改2020-01-22 15:43:04
1.3K0
修改2020-01-22 15:43:04
举报
文章被收录于专栏:HueiFeng技术专栏HueiFeng技术专栏

前言

在我们开发中可能需要设计一次性应用程序,这些实用程序可以利用接近原始源代码的优势,但可以在与主Web应用程序完全独立的安全性上下文中启动。具体在 管理过程 (https://12factor.net/admin-processes)中也已经列出了原因。

创建控制台应用

打开命令提示符,创建创建一个ConsoleDemo的文件夹,键入如下片段

代码语言:txt
复制
dotnet new console



dotnet run
代码语言:txt
复制
dotnet run



Hello World!

或者我们还可以通过 dotnet build 来编译代码,无需运行已生成的控制台应用程序,这回基于项目的名称将已编译的应用程序作为DLL文件生成。在这种情况下,创建的文件命名为 ConsoleDemo.dll 。此时我们可以使用Windows上的dotnet bin\Debug\netcoreapp3.1\ConsoleDemo.dll 运行(非 Windows 系统使用 )。

代码语言:txt
复制
dotnet bin\Debug\netcoreapp3.1\ConsoleDemo.dll



Hello World!

在编译应用时,会随ConsoleDemo.dll一起创建特定于操作系统可执行文件。在Windows上,这将是ConsoleDemo.exe;在Linux或者macOS上,这将是ConsoleDemo.在上面的示例中,用ConsoleDemo.exe或ConsoleDemo命名该文件。可以直接运行该可执行文件。

代码语言:txt
复制
.\bin\Debug\netcoreapp3.1\ConsoleDemo.exe



Hello World!

HelloWord

首先我们先引入到我们控制台应用中如下包

代码语言:txt
复制
Install-Package  McMaster.Extensions.CommandLineUtils

Attribute API

代码语言:txt
复制
using System;

using McMaster.Extensions.CommandLineUtils;



public class Program

{

    public static int Main(string[] args)

        => CommandLineApplication.Execute<Program>(args);



    [Option(Description = "The subject")]

    public string Subject { get; }



    [Option(ShortName = "n")]

    public int Count { get; }



    private void OnExecute()

    {

        var subject = Subject ?? "world";

        for (var i = 0; i < Count; i++)

        {

            Console.WriteLine($"Hello {subject}!");

        }

    }

}

Builder API

代码语言:txt
复制
using System;

using McMaster.Extensions.CommandLineUtils;



public class Program

{

    public static int Main(string[] args)

    {

        var app = new CommandLineApplication();



        app.HelpOption();

        var optionSubject = app.Option("-s|--subject <SUBJECT>", "The subject", CommandOptionType.SingleValue);

        var optionRepeat = app.Option<int>("-n|--count <N>", "Repeat", CommandOptionType.SingleValue);



        app.OnExecute(() =>

        {

            var subject = optionSubject.HasValue()

                ? optionSubject.Value()

                : "world";



            var count = optionRepeat.HasValue() ? optionRepeat.ParsedValue : 1;

            for (var i = 0; i < count; i++)

            {

                Console.WriteLine($"Hello {subject}!");

            }

            return 0;

        });



        return app.Execute(args);

    }

}

上述代码直接来自官方....这边我偷个懒不自己写了.

我们测试一下

代码语言:txt
复制
dotnet run -help

Usage:  [options]



Options:

  -?|-h|--help            Show help information

  -s|--subject <SUBJECT>  The subject

  -n|--count <N>          Repeat
代码语言:txt
复制
dotnet run -s Fh

Hello Fh!

Command

这些属性全部由CommandLineUtils提供,以生成实际的命令行解析器。 Command代表具有"选项"和"参数"的"Command"(转到数字)。任何装饰了的类Command还必须实现一个称为OnExecute()或的方法OnExecuteAsync()。返回类型必须为void或int(Task或Task<int>在异步变量的情况下),并且参数将从您的依赖项注入容器(在这种情况下为Microsoft.Extensions.Dependency.Injection)中注入。

HelpOption

有许多带有单词"Option"的属性。这些都增加了命令将接受的命令行选项。在这种情况下,我们希望顶层命令使用默认值-h或--help选项提供帮助。完成此操作后,子命令还将以类似方式提供帮助。

Subcommand

Subcommand属性对于指示哪些命令将成为当前命令的子命令是必需的。在编译时知道代码中的所有子命令对于基于约定的优化来说已经很成熟了。选择以当前方式进行组织可以使我们在各个命令之间重用子命令。

Reference

https://natemcmaster.github.io/CommandLineUtils/v2.5/api/McMaster.Extensions.CommandLineUtils.OptionAttribute.html

https://github.com/hueifeng/BlogSample/tree/master/src/ConsoleDemo

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档