控制台发送get命令_.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 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.exe或ConsoleDemo命名该文件。可以直接运行该可执行文件。
.\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 -helpUsage: [options]
Options: -?|-h|--help Show help information -s|--subject The subject -n|--count Repeat
dotnet run -s FhHello 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人
控制台发送get命令_.NET Core使用命令行参数库构建控制台应用程序相关推荐
- 如何将命令行参数传递给Node.js程序?
我有一个用Node.js编写的Web服务器,我想使用一个特定的文件夹启动. 我不确定如何在JavaScript中访问参数. 我正在像这样运行节点: $ node server.js folder 这是 ...
- 很装b那种cmd命令_简单电脑CMD命令
前言 最近发现一个超级强大的东西,一贯坚持独乐乐不如众乐乐的我迫不及待的想要跟大家分享一下. 1.电脑左下角打开CMD命令窗口,我们试着输入help(帮助)然后回车会出现很多指令.下面是我刚学的几招, ...
- 响应因特网端口ping命令_如何使用Ping命令识别基本的Internet问题
响应因特网端口ping命令 Next time you call your help desk, do you want to wow them with your networking knowle ...
- 下运行maven命令_实话实说 | 这些maven命令,你会几个?
今天有位微信好友私下问我:mvn install怎么好像把mvn compile的活也干了,所以我平时都是使用mvn install就ok了.奇怪的是,为什么还要搞个mvn compile呢? 听了这 ...
- mysql内测试连通性命令_怎么使用ping命令进行连通性测试
关于ping命令的作用: ping 命令有助于验证网络层的连通性!一般进行网络故障排除时,可以使用ping 命令向目标计算机或IP地址发送ICMP回显请求,目标计算机会返回回显应答,如果目标计算机不能 ...
- 刷新mac地址命令_常用网络检测命令-必备技术
现在弱电行业工作,设备基本上普遍是使用网络连接,因此具有一定网络检测命令知识,这时通过使用一些网络的基本命令来检测设备的网络状态.以下,介绍常用网络命令: 1.ping命令 ping 命令式用来测试T ...
- chmod 777命令_实用的linux 命令(上)
今天介绍几个我常用的Linux 命令,每个命令这里只介绍其常用参数. 对于每个Linux 命令都可以使用man + 命令名称,查看其完整使用方法. 0,man man 命令是一个非常有用的命令,当你不 ...
- 电脑上使用计算机命令行,我的电脑运行命令_我的电脑什么运行命令
2016-12-21 19:44:14 命令提示符是在操作系统中,提示进行命令输入的一种工作提示符.在不同的操作系统环境下,命令提示符各不相同.在windows环境下,命令行程序为cmd.exe,是一 ...
- 中兴zxr10路由器重启命令_中兴交换机常用命令
中兴交换机配置命令 ZTE交换机配置常用命令汇总 命令的使用要注意各种用户模式. 配成普通交换机:把2-24端口归到VLAN1下,2-24端口如果互相隔离,可以用PVLAN删除隔离端口即可. 2852 ...
最新文章
- 局部类的引用成员函数或虚函数必须进行定义
- 11 个新项目入选 CNCF Sandbox | 云原生生态周报 Vol. 56
- spring cloud网关(zuul)使用RateLimiter限流,使用jMeter性能测试高并发
- 自适应高度表格_【干货分享】Word制作表格,这几个技巧必须要学会!
- 逻辑回归模型 python_机器学习-逻辑回归分析(Python)
- 实现点击按钮后,倒计时60秒才能再次点击
- ajax实现浏览器前进后退-location.hash与模拟iframe
- 苹果或在2021年新iPhone上增加屏下Touch ID
- iOS学习之Object-C语言继承和初始化方法
- 安卓输入法 车机版_搜狗输入法车机下载安装-搜狗输入法车载版下载v10.10.1 安卓版-单机手游网...
- windows cmd 快速编辑模式
- vue使用Moment插件格式化时间
- 服务机器人工程师(ROS)要求汇总220331
- 基于Matlab的数字水印设计—基于DCT域的水印算法实现
- 混合开发--vue之mand-mobile 框架引入,解决组件巨大问题
- 蓝牙学习笔记之SMP协议(十四)
- MVC母版页的使用方法
- 编写ASCOM平台的驱动
- 加州大学欧文分校计算机排名,2017年加州大学欧文分校在美国的排名是多少?...
- 干货 | 蒙特卡洛方法(Monte Carlo)
热门文章
- [MEGA DEAL]完整的Java捆绑包(96%折扣)
- jpa 异常捕获_JPA和CMT –为什么捕获持久性异常不够?
- 使用Okta的单点登录保护您的Vert.x服务器
- Java 9:好的,坏的和私有的接口方法
- Java垃圾收集器:G1GC何时将CMS强制退出?
- Java 9模块系统(拼图)@ LJC的HackTheTower
- 开发人员的新分布式基元
- spring jmx_JMX和Spring –第3部分
- java抽象类和模板模式_测试抽象类和模板方法模式
- 拼图推迟将Java 9的发布日期推迟到2017年