Přizpůsobení nápovědy v aplikacích vytvořených pomocí knihovny System.Commandline
Nápovědu pro konkrétní příkaz, možnost nebo argument můžete přizpůsobit a můžete přidat nebo nahradit celé části nápovědy.
Příklady v tomto článku fungují s následující aplikací příkazového řádku:
Tento kód vyžaduje direktivu using
:
using System.CommandLine;
var fileOption = new Option<FileInfo>(
"--file",
description: "The file to print out.",
getDefaultValue: () => new FileInfo("scl.runtimeconfig.json"));
var lightModeOption = new Option<bool> (
"--light-mode",
description: "Determines whether the background color will be black or white");
var foregroundColorOption = new Option<ConsoleColor>(
"--color",
description: "Specifies the foreground color of console output",
getDefaultValue: () => ConsoleColor.White);
var rootCommand = new RootCommand("Read a file")
{
fileOption,
lightModeOption,
foregroundColorOption
};
rootCommand.SetHandler((file, lightMode, color) =>
{
Console.BackgroundColor = lightMode ? ConsoleColor.White: ConsoleColor.Black;
Console.ForegroundColor = color;
Console.WriteLine($"--file = {file?.FullName}");
Console.WriteLine($"File contents:\n{file?.OpenText().ReadToEnd()}");
},
fileOption,
lightModeOption,
foregroundColorOption);
await rootCommand.InvokeAsync(args);
Bez přizpůsobení se vytvoří následující výstup nápovědy:
Description:
Read a file
Usage:
scl [options]
Options:
--file <file> The file to print out. [default: scl.runtimeconfig.json]
--light-mode Determines whether the background color will be black or
white
--color Specifies the foreground color of console output
<Black|Blue|Cyan|DarkBlue|DarkCyan|DarkGray|DarkGreen|Dark [default: White]
Magenta|DarkRed|DarkYellow|Gray|Green|Magenta|Red|White|Ye
llow>
--version Show version information
-?, -h, --help Show help and usage information
Přizpůsobení nápovědy pro jednu možnost nebo argument
Důležité
System.CommandLine
je aktuálně ve verzi PREVIEW a tato dokumentace je určená pro verzi 2.0 beta 4.
Některé informace se týkají předběžné verze produktu, který může být podstatně změněn před vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Chcete-li přizpůsobit název argumentu možnosti, použijte vlastnost možnosti ArgumentHelpName . A HelpBuilder.CustomizeSymbol umožňuje přizpůsobit několik částí výstupu nápovědy pro příkaz, možnost nebo argument (Symbol je základní třída pro všechny tři typy). Pomocí CustomizeSymbol
možnosti můžete zadat:
- První text sloupce.
- Druhý text sloupce.
- Způsob, jakým je popsána výchozí hodnota.
V ukázkové aplikaci --light-mode
je vysvětleno adekvátně, ale změny --file
popisů možností --color
budou užitečné. Argument --file
lze v případě argumentu označit jako místo <FILEPATH>
<file>
. U této --color
možnosti můžete zkrátit seznam dostupných barev ve sloupci o jeden a ve sloupci 2 můžete přidat upozornění, že některé barvy nebudou s určitými pozadími fungovat.
Pokud chcete provést tyto změny, odstraňte await rootCommand.InvokeAsync(args);
řádek zobrazený v předchozím kódu a přidejte na jeho místo následující kód:
fileOption.ArgumentHelpName = "FILEPATH";
var parser = new CommandLineBuilder(rootCommand)
.UseDefaults()
.UseHelp(ctx =>
{
ctx.HelpBuilder.CustomizeSymbol(foregroundColorOption,
firstColumnText: "--color <Black, White, Red, or Yellow>",
secondColumnText: "Specifies the foreground color. " +
"Choose a color that provides enough contrast " +
"with the background color. " +
"For example, a yellow foreground can't be read " +
"against a light mode background.");
})
.Build();
parser.Invoke(args);
Aktualizovaný kód vyžaduje další using
direktivy:
using System.CommandLine.Builder;
using System.CommandLine.Help;
using System.CommandLine.Parsing;
Aplikace teď vytvoří následující výstup nápovědy:
Description:
Read a file
Usage:
scl [options]
Options:
--file <FILEPATH> The file to print out. [default: CustomHelp.runtimeconfig.json]
--light-mode Determines whether the background color will be black or white
--color <Black, White, Red, or Yellow> Specifies the foreground color. Choose a color that provides enough contrast
with the background color. For example, a yellow foreground can't be read
against a light mode background.
--version Show version information
-?, -h, --help Show help and usage information
Tento výstup ukazuje, že firstColumnText
parametry podporují secondColumnText
obtékání slov ve sloupcích.
Přidání nebo nahrazení oddílů nápovědy
Můžete přidat nebo nahradit celý oddíl výstupu nápovědy. Předpokládejme například, že chcete do oddílu popisu přidat některé obrázky ASCII pomocí balíčku NuGet Spectre.Console .
Změňte rozložení přidáním volání HelpBuilder.CustomizeLayout do lambda předaného metodě UseHelp :
fileOption.ArgumentHelpName = "FILEPATH";
var parser = new CommandLineBuilder(rootCommand)
.UseDefaults()
.UseHelp(ctx =>
{
ctx.HelpBuilder.CustomizeSymbol(foregroundColorOption,
firstColumnText: "--color <Black, White, Red, or Yellow>",
secondColumnText: "Specifies the foreground color. " +
"Choose a color that provides enough contrast " +
"with the background color. " +
"For example, a yellow foreground can't be read " +
"against a light mode background.");
ctx.HelpBuilder.CustomizeLayout(
_ =>
HelpBuilder.Default
.GetLayout()
.Skip(1) // Skip the default command description section.
.Prepend(
_ => Spectre.Console.AnsiConsole.Write(
new FigletText(rootCommand.Description!))
));
})
.Build();
await parser.InvokeAsync(args);
Předchozí kód vyžaduje další using
direktivu:
using Spectre.Console;
Třída System.CommandLine.Help.HelpBuilder.Default umožňuje opakovaně používat části existující nápovědy k formátování a vytvářet je do vlastní nápovědy.
Výstup nápovědy teď vypadá takto:
____ _ __ _ _
| _ \ ___ __ _ __| | __ _ / _| (_) | | ___
| |_) | / _ \ / _` | / _` | / _` | | |_ | | | | / _ \
| _ < | __/ | (_| | | (_| | | (_| | | _| | | | | | __/
|_| \_\ \___| \__,_| \__,_| \__,_| |_| |_| |_| \___|
Usage:
scl [options]
Options:
--file <FILEPATH> The file to print out. [default: CustomHelp.runtimeconfig.json]
--light-mode Determines whether the background color will be black or white
--color <Black, White, Red, or Yellow> Specifies the foreground color. Choose a color that provides enough contrast
with the background color. For example, a yellow foreground can't be read
against a light mode background.
--version Show version information
-?, -h, --help Show help and usage information
Pokud chcete jenom použít řetězec jako text náhradního oddílu místo jeho formátování Spectre.Console
, nahraďte Prepend
kód v předchozím příkladu následujícím kódem:
.Prepend(
_ => _.Output.WriteLine("**New command description section**")