前言
在咱們開發中可能須要設計一次性應用程序,這些實用程序能夠利用接近原始源代碼的優點,但能夠在與主Web應用程序徹底獨立的安全性上下文中啓動。具體在 [管理過程](https://12factor.net/admin-processes)中也已經列出了緣由。html
建立控制檯應用
打開命令提示符,建立建立一個ConsoleDemo的文件夾,鍵入以下片斷git
dotnet new console dotnet run
dotnet run Hello World!
或者咱們還能夠經過 dotnet build 來編譯代碼,無需運行已生成的控制檯應用程序,這回基於項目的名稱將已編譯的應用程序做爲DLL文件生成。在這種狀況下,建立的文件命名爲 ConsoleDemo.dll 。此時咱們可使用Windows上的dotnet bin\Debug\netcoreapp3.1\ConsoleDemo.dll 運行(非 Windows 系統使用 /)。github
dotnet bin\Debug\netcoreapp3.1\ConsoleDemo.dll Hello World!
在編譯應用時,會隨ConsoleDemo.dll一塊兒建立特定於操做系統可執行文件。在Windows上,這將是ConsoleDemo.exe;在Linux或者macOS上,這將是ConsoleDemo.在上面的示例中,用ConsoleDemo.exe或ConsoleDemo命名該文件。能夠直接運行該可執行文件。api
.\bin\Debug\netcoreapp3.1\ConsoleDemo.exe Hello World!
使用命令行參數庫構建
首先咱們先引入到咱們控制檯應用中以下包安全
Install-Package McMaster.Extensions.CommandLineUtils
Attribute APIbash
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 APIapp
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
[HelpOption]
有許多帶有單詞"Option"的屬性。這些都增長了命令將接受的命令行選項。在這種狀況下,咱們但願頂層命令使用默認值-h或--help選項提供幫助。完成此操做後,子命令還將以相似方式提供幫助。
[Subcommand]
[Subcommand]屬性對於指示哪些命令將成爲當前命令的子命令是必需的。在編譯時知道代碼中的全部子命令對於基於約定的優化來講已經很成熟了。選擇以當前方式進行組織可使咱們在各個命令之間重用子命令。
Reference
https://github.com/hueifeng/BlogSample/tree/master/src/ConsoleDemo