.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

目录
相关文章
|
1月前
|
C#
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
|
14天前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
37 5
|
1月前
|
人工智能 自然语言处理 API
适用于 .NET 稳定的官方OpenAI库
适用于 .NET 稳定的官方OpenAI库
|
1月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
41 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
14天前
|
弹性计算 开发框架 安全
基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发
本文将基于云效 Flow 流水线 Windows 构建环境和云效 Packages Nuget 制品仓库手把手教你如何开发并部署一个 .NET 应用,从环境搭建到实战应用发布的详细教程,帮助你掌握 .NET 开发的核心技能。
|
22天前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
24 3
|
1月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
35 4
|
1月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
1月前
|
Kubernetes Cloud Native Ubuntu
庆祝 .NET 9 正式版发布与 Dapr 从 CNCF 毕业:构建高效云原生应用的最佳实践
2024年11月13日,.NET 9 正式版发布,Dapr 从 CNCF 毕业,标志着云原生技术的成熟。本文介绍如何使用 .NET 9 Aspire、Dapr 1.14.4、Kubernetes 1.31.0/Containerd 1.7.14、Ubuntu Server 24.04 LTS 和 Podman 5.3.0-rc3 构建高效、可靠的云原生应用。涵盖环境准备、应用开发、Dapr 集成、容器化和 Kubernetes 部署等内容。
57 5
|
1月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
102 2