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

前言

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

创建控制台应用

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

dotnet new console

dotnet rundotnet runHello World!

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

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

Hello World!

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


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

Hello World!

使用命令行参数库构建

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


Install-Package McMaster.Extensions.CommandLineUtils

Attribute API


using System;
using McMaster.Extensions.CommandLineUtils;

public class Program
{
public static int Main(string[] args)
=> CommandLineApplication.Execute(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 ", "The subject", CommandOptionType.SingleValue);
var optionRepeat = app.Option<int>("-n|--count ", "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 The subject
-n|--count 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

使用优惠口令「dotnet123?到手仅¥89,限前200

26eab227fa3cd9fb9eb37b01b6cab230.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言函数为什么不能返回数组?

C语言函数为什么不能返回数组&#xff1f;在C语言程序开发中&#xff0c;我们不可以编写下面这样的代码&#xff1a;char f(void)[8] {char ret; // ...fill... return ret; }int main(int argc, char ** argv) {char obj_a[10]; obj_a f(); }不可以编写这样的代码这其实就是不…

mockito_书评:Mockito Essentials

mockitoSujoy Acharya的Mockito Essentials副标题&#xff08; Packt出版 &#xff0c;2014年10月&#xff09;是&#xff1a;“实用指南&#xff0c;可帮助您使用Mockito进行单元测试并开始运行。” Mockito Essentials中的前言和七章涵盖大约190个实质性页面。 前言 在序言中…

python3 byte 字面值_bytearray() Python 内置函数

转载须注明出处&#xff1a;简书Orca_J35 | GitHuborca-j35 class bytearray([source[, encoding[, errors]]]) 该内置函数本质上是 bytearray 类的构造函数&#xff0c;用于创建一个 bytearray 实例。bytearray 实例是一个由字节(8-bits 无符号)构成的可变序列&#xff0c;并拥…

python如何调用c函数实现真正意义的多线程_python如何使用多线程执行多个函数?...

之前小编给大家介绍了用python去返回了一个值&#xff0c;立马就有小伙伴跟小编留言说道“能都执行多个内容&#xff1f;”于是&#xff0c;小编就给大家整理最细致&#xff0c;也是最简单的实现方法&#xff0c;方便大家理解学习&#xff0c;一起来看下吧~直接上代码&#xff…

Java EE 8怎么了? (第2部分)

Java EE 8的工作仍处于初期阶段&#xff0c;并有望在来年跟上发展步伐&#xff0c;届时我们将看到专家组的完成&#xff0c;围绕用例/功能的更多讨论&#xff0c;大量JIRA和各种规范的草案版本&#xff08;本会很有趣&#xff01;&#xff09;。 在第1部分中 &#xff0c;我们…

C语言中quot;##quot;的独特用法

市面上有很多比较火的编程语言&#xff0c;比如Python、 JAVA、 Go等&#xff0c;你可能觉得C语言很古老、很落后。如果你有这种想法&#xff0c;那可能你只是一个初学的菜鸟。可能绝大部分 C 程序员都不知道"##"隐藏用法&#xff0c;下面就来给大家讲讲。一、##的“…

html a标签去掉下划线_如何用HTML基本元素制作表格

第2天【HTML基本元素】主要内容标题标签段落标签强制换行水平线图片超链接文本格式化标签列表表格学习目标一、标题标题&#xff08;Heading&#xff09;是通过 <h1> - <h6> 标签进行定义的。<h1> 定义最大的标题。 <h6> 定义最小的标题。标题很重要请…

mysql忽略数据类型_MYSQL 常用数据类型

数字列类型数字列类型用于储存各种数字数据&#xff0c;如价格、年龄或者数量。数字列类型主要分为两种&#xff1a;整数型和浮点型。所有的数字列类型都允许有两个选项&#xff1a;UNSIGNED和ZEROFILL。选择UNSIGNED的列不允许有负数&#xff0c;选择了ZEROFILL的列会为数值添…

C语言中几个容易踩的“坑”!

今天给大家分享几个C语言中的坑。一、带参数的宏展开顺序#include #define f(a,b) a##b #define g(a) #a #define h(a) g(a)int main(void) {printf("%s\n",h(f(1,2)));printf("%s\n",g(f(1,2)));return 0; }运行结果:12f(1,2)浅析&#xff1a;本题中的#运…

java 拼图_我最喜欢的Java拼图2 + 1 = 4

java 拼图这是我当前最喜欢的Java难题。 您如何获取代码来执行此操作&#xff1f; Integer b 2; Integer c 1;System.out.println("bc : " (bc) ); // output: bc : 4 !!Sytem.out.println&#xff08;&#xff09;没有技巧&#xff0c;也就是说&#xff0c;您将…

dockerfile cd目录_使用Werf和现有的Dockerfiles改善你的CI/CD体验

迟到总比不到好。该故事讲关于我们因不支持使用常规的Dockerfile来构建镜像导致我们差点犯了一个重大错误。Werf[1]是一个GitOps工具&#xff0c;可以很好地集成到任何CI/CD系统中&#xff0c;并提供完整的应用程序生命周期管理&#xff0c;允许你&#xff1a;构建和推送镜像部…

alxc tool 报错数组超出了界限_代码审计之报错信息泄露与字符串截断

机器在语言编码转换的时候&#xff0c;经常会出现各种各样的异常&#xff0c;这些神奇的字符串就有可能组合成一堆乱码出来&#xff0c;也有可能直接把程序搞崩溃掉&#xff0c;不过总有那么一些字符&#xff0c;可以帮助我们在利用漏洞的时候变得更简单一些&#xff0c;下面我…

C语言,去你的策略模式!

前言 这里先插一点题外话&#xff0c;在C语言中&#xff0c;实现封装、继承、隐藏、多态等等特性&#xff0c;是完全没有问题的。但是在使用过程中&#xff0c;必定是不如自带这些特性的语言方便好用的&#xff0c;比如C \java等。一旦要通过C语言来实现各种设计模式&#xff0…

eager_EAGER的获取是代码的味道

eager介绍 Hibernate获取策略确实可以使几乎没有爬网的应用程序和响应Swift的应用程序有所不同。 在这篇文章中&#xff0c;我将解释为什么您应该选择基于查询的获取而不是全局获取计划。 取得101 Hibernate定义了四种关联检索策略 &#xff1a; 提取策略 描述 加入 原始S…

什么时候会是用treeset?_flex:1 到底代表什么?

今天在做项目的时候遇到一个关于布局的问题, 就是 flex: 1; 我一直以为 flex: 1; 代表的是 flex: aoto; 后来发现结果并不是这样, 所以写一篇博客来讲解一下 flex: 1; 代表什么代码第一版<div class"container"><div class"div">我是一个div&l…

纠缠不清的C语言位域(位段)详解

位域是什么&#xff1f;有些数据在存储时并不需要占用一个完整的字节&#xff0c;只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态&#xff0c;用 0 和 1 表示足以&#xff0c;也就是用一个二进位。正是基于这种考虑&#xff0c;C语言又提供了一种叫做位域的…

matlab画累计直方图_科学网—matlab 绘制直方图——常用命令 - 范凯波的博文

直方图上显示数值close all ,x rand(100,1);%获得直方图的数据[n,y] hist(x);maxN max(n);%设置显示x,y长度限制axis([0 1.2 0 maxN2])%根据直方图的数据绘制出图形bar(y,n);for i 1:length(y)%直方图上面数据对不齐&#xff0c;利用水平和垂直对齐 &#xff0c;可以参考se…

玩转java并发工具_玩Java并发

玩转java并发工具最近&#xff0c;我需要将一些文件&#xff08;每个文件都有JSON格式的对象列表&#xff08;数组&#xff09;&#xff09;转换为每个文件都具有相同数据&#xff08;对象&#xff09;的分隔行的文件。 这是一次性的任务&#xff0c;很简单。 我使用Java nio的…

django debug=false后静态文件丢失_python框架Django实战商城项目之工程搭建

项目说明 该电商项目类似于京东商城&#xff0c;主要模块有验证、用户、第三方登录、首页广告、商品、购物车、订单、支付以及后台管理系统。 项目开发模式采用前后端不分离的模式&#xff0c;为了提高搜索引擎排名&#xff0c;页面整体刷新采用jinja2模板引擎实现&#xff0c;…

mysql解压缩 1067_windows安装mysql8.0.0解压版附出现1067错误解决方法

1、自己到mysql官网下载mysql-8.0.0-dmr-winx64.zip解压缩安装包2、下载页面地址&#xff1a;https://dev.mysql.com/downloads/mysql/3、解压缩到任意目录(我自己是D:\DevTools\mysql-8.0.0)4、配置环境变量添加path路径为你的mysql8.0.0路径下面的bin目录(我的目录是D:\DevTo…