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

简介:

前言

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

创建控制台应用

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


dotnet new console

​

dotnet run

​

dotnet run

​

Hello World!

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


dotnet bin\Debug\netcoreapp3.1\ConsoleDemo.dll

​

Hello World!

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


​

.\bin\Debug\netcoreapp3.1\ConsoleDemo.exe

​

Hello World!

​

HelloWord

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


​

Install-Package  McMaster.Extensions.CommandLineUtils

​

Attribute API


​

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


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);

    }

}

​

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

我们测试一下


​

dotnet run -help

Usage:  [options]

​

Options:

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

  -s|--subject <SUBJECT>  The subject

  -n|--count <N>          Repeat

​


dotnet run -s Fh

Hello Fh!

**[Command]**

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

目录
相关文章
|
15天前
|
C# Windows
.NET开源免费的Windows快速文件搜索和应用程序启动器
今天大姚给大家分享一款.NET开源(MIT License)、免费、功能强大的Windows快速文件搜索和应用程序启动器:Flow Launcher。
|
15天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
3月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
71 0
|
3月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
37 0
|
3月前
|
开发框架 JavaScript .NET
ASP.NET Core的超级大BUG
ASP.NET Core的超级大BUG
42 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
1月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
62 0
|
2月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
33 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报