.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

目录
相关文章
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
541 10
|
3月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
6月前
|
JSON 数据格式
【Azure Fabric Service】演示使用PowerShell命令部署SF应用程序(.NET)
本文详细介绍了在中国区微软云Azure上使用Service Fabrics服务时,通过PowerShell命令发布.NET应用的全过程。由于Visual Studio 2022无法直接发布应用,需借助PowerShell脚本完成部署。文章分三步讲解:首先在Visual Studio 2022中打包应用部署包,其次连接SF集群并上传部署包,最后注册应用类型、创建实例并启动服务。过程中涉及关键参数如服务器证书指纹和服务端证书指纹的获取,并附带图文说明,便于操作。参考官方文档,帮助用户成功部署并运行服务。
210 73
|
9月前
|
前端开发 C# 开发者
.NET使用Umbraco CMS快速构建一个属于自己的内容管理系统
.NET使用Umbraco CMS快速构建一个属于自己的内容管理系统
120 12
|
9月前
|
弹性计算 开发框架 安全
基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发
本文将基于云效 Flow 流水线 Windows 构建环境和云效 Packages Nuget 制品仓库手把手教你如何开发并部署一个 .NET 应用,从环境搭建到实战应用发布的详细教程,帮助你掌握 .NET 开发的核心技能。
|
10月前
|
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 部署等内容。
567 6
|
11月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
202 9
|
11月前
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
226 2
|
11月前
|
Web App开发 Shell Linux
MacOS环境-手写操作系统-41-mem 第一个控制台程序
MacOS环境-手写操作系统-41-mem 第一个控制台程序
85 1
|
设计模式 存储 前端开发
揭秘.NET架构设计模式:如何构建坚不可摧的系统?掌握这些,让你的项目无懈可击!
【8月更文挑战第28天】在软件开发中,设计模式是解决常见问题的经典方案,助力构建可维护、可扩展的系统。本文探讨了.NET中三种关键架构设计模式:MVC、依赖注入与仓储模式,并提供了示例代码。MVC通过模型、视图和控制器分离关注点;依赖注入则通过外部管理组件依赖提升复用性和可测性;仓储模式则统一数据访问接口,分离数据逻辑与业务逻辑。掌握这些模式有助于开发者优化系统架构,提升软件质量。
161 5

热门文章

最新文章