前言
在我們開發中可能需要設計一次性應用程式,這些實用程式可以利用接近原始源代碼的優勢,但可以在與主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<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
[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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/71383.html
標籤:.NET Core
