控制台发送get命令_.NET Core使用命令行参数库构建控制台应用程序
前言
在我們開發(fā)中可能需要設(shè)計(jì)一次性應(yīng)用程序,這些實(shí)用程序可以利用接近原始源代碼的優(yōu)勢(shì),但可以在與主Web應(yīng)用程序完全獨(dú)立的安全性上下文中啟動(dòng)。具體在?[管理過程](https://12factor.net/admin-processes)中也已經(jīng)列出了原因。
創(chuàng)建控制臺(tái)應(yīng)用
打開命令提示符,創(chuàng)建創(chuàng)建一個(gè)ConsoleDemo的文件夾,鍵入如下片段
dotnet new consoledotnet rundotnet runHello World!
或者我們還可以通過?dotnet build?來編譯代碼,無需運(yùn)行已生成的控制臺(tái)應(yīng)用程序,這回基于項(xiàng)目的名稱將已編譯的應(yīng)用程序作為DLL文件生成。在這種情況下,創(chuàng)建的文件命名為?ConsoleDemo.dll?。此時(shí)我們可以使用Windows上的dotnet bin\Debug\netcoreapp3.1\ConsoleDemo.dll 運(yùn)行(非 Windows 系統(tǒng)使用 /)。
dotnet bin\Debug\netcoreapp3.1\ConsoleDemo.dllHello World!
在編譯應(yīng)用時(shí),會(huì)隨ConsoleDemo.dll一起創(chuàng)建特定于操作系統(tǒng)可執(zhí)行文件。在Windows上,這將是ConsoleDemo.exe;在Linux或者macOS上,這將是ConsoleDemo.在上面的示例中,用ConsoleDemo.exe或ConsoleDemo命名該文件??梢灾苯舆\(yùn)行該可執(zhí)行文件。
.\bin\Debug\netcoreapp3.1\ConsoleDemo.exe
Hello World!
使用命令行參數(shù)庫(kù)構(gòu)建
首先我們先引入到我們控制臺(tái)應(yīng)用中如下包
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);
}
}
上述代碼直接來自官方....這邊我偷個(gè)懶不自己寫了.
我們測(cè)試一下
dotnet run -help
Usage: [options]
Options:
-?|-h|--help Show help information
-s|--subject The subject
-n|--count Repeatdotnet run -s Fh
Hello Fh!
[Command]
這些屬性全部由CommandLineUtils提供,以生成實(shí)際的命令行解析器。 Command代表具有"選項(xiàng)"和"參數(shù)"的"Command"(轉(zhuǎn)到數(shù)字)。任何裝飾了的類[Command]還必須實(shí)現(xiàn)一個(gè)稱為OnExecute()或的方法OnExecuteAsync()。返回類型必須為void或int(Task或Task在異步變量的情況下),并且參數(shù)將從您的依賴項(xiàng)注入容器(在這種情況下為Microsoft.Extensions.Dependency.Injection)中注入。
[HelpOption]
有許多帶有單詞"Option"的屬性。這些都增加了命令將接受的命令行選項(xiàng)。在這種情況下,我們希望頂層命令使用默認(rèn)值-h或--help選項(xiàng)提供幫助。完成此操作后,子命令還將以類似方式提供幫助。
[Subcommand]
[Subcommand]屬性對(duì)于指示哪些命令將成為當(dāng)前命令的子命令是必需的。在編譯時(shí)知道代碼中的所有子命令對(duì)于基于約定的優(yōu)化來說已經(jīng)很成熟了。選擇以當(dāng)前方式進(jìn)行組織可以使我們?cè)诟鱾€(gè)命令之間重用子命令。
Reference
https://natemcmaster.github.io/CommandLineUtils/v2.5/api/McMaster.Extensions.CommandLineUtils.OptionAttribute.html
https://github.com/hueifeng/BlogSample/tree/master/src/ConsoleDemo
使用優(yōu)惠口令「dotnet123」?到手僅¥89,限前200人總結(jié)
以上是生活随笔為你收集整理的控制台发送get命令_.NET Core使用命令行参数库构建控制台应用程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql cluster 设置单向复制
- 下一篇: .net mvc actionresul