前言 在我們開發中可能需要設計一次性應用程式,這些實用程式可以利用接近原始源代碼的優勢,但可以在與主Web應用程式完全獨立的安全性上下文中啟動。具體在 [管理過程] (https://12factor.net/admin processes)中也已經列出了原因。 創建控制台應用 打開命令提示符,創建 ...
前言
在我們開發中可能需要設計一次性應用程式,這些實用程式可以利用接近原始源代碼的優勢,但可以在與主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://github.com/hueifeng/BlogSample/tree/master/src/ConsoleDemo