System.Commandline kitaplığıyla oluşturulan uygulamalarda yardım özelleştirme
Belirli bir komut, seçenek veya bağımsız değişken için yardımı özelleştirebilir ve yardım bölümlerinin tamamını ekleyebilir veya değiştirebilirsiniz.
Bu makaledeki örnekler aşağıdaki komut satırı uygulamasıyla çalışır:
Bu kod bir using
yönerge gerektirir:
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);
Özelleştirme olmadan aşağıdaki yardım çıkışı oluşturulur:
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
Tek bir seçenek veya bağımsız değişken için yardımı özelleştirme
Önemli
System.CommandLine
şu anda ÖNİzLEME aşamasındadır ve bu belgeler 2.0 beta 4 sürümüne yöneliktir.
Bazı bilgiler, yayımlanmadan önce önemli ölçüde değiştirilebilen yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir seçeneğin bağımsız değişkeninin adını özelleştirmek için seçeneğin ArgumentHelpName özelliğini kullanın. Ayrıca HelpBuilder.CustomizeSymbol , bir komut, seçenek veya bağımsız değişken için yardım çıkışının birkaç bölümünü özelleştirmenizi sağlar (Symbol üç türün de temel sınıfıdır). ile CustomizeSymbol
şunları belirtebilirsiniz:
- İlk sütun metni.
- İkinci sütun metni.
- Varsayılan değerin açıklandığı şekilde.
Örnek uygulamada, --light-mode
yeterince açıklanmıştır, ancak ve --color
seçeneği açıklamalarında yapılan değişiklikler --file
yararlı olacaktır. için --file
bağımsız değişkeni yerine <file>
olarak <FILEPATH>
tanımlanabilir. Seçenek için --color
, birinci sütundaki kullanılabilir renklerin listesini kısaltabilir ve ikinci sütunda bazı renklerin bazı arka planlarla çalışmayacağını belirten bir uyarı ekleyebilirsiniz.
Bu değişiklikleri yapmak için, önceki kodda gösterilen satırı silin await rootCommand.InvokeAsync(args);
ve yerine aşağıdaki kodu ekleyin:
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);
Güncelleştirilmiş kod ek using
yönergeler gerektirir:
using System.CommandLine.Builder;
using System.CommandLine.Help;
using System.CommandLine.Parsing;
Uygulama şimdi aşağıdaki yardım çıkışını üretir:
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
Bu çıkış, ve secondColumnText
parametrelerinin firstColumnText
sütunları içinde sözcük kaydırmayı desteklediğini gösterir.
Yardım bölümlerini ekleme veya değiştirme
Yardım çıkışının tüm bölümünü ekleyebilir veya değiştirebilirsiniz. Örneğin, Spectre.Console NuGet paketini kullanarak açıklama bölümüne ASCII resmi eklemek istediğinizi varsayalım.
yöntemine geçirilen UseHelp lambda'ya HelpBuilder.CustomizeLayout bir çağrı ekleyerek düzeni değiştirin:
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);
Yukarıdaki kod ek using
bir yönerge gerektirir:
using Spectre.Console;
sınıfı, System.CommandLine.Help.HelpBuilder.Default mevcut yardım biçimlendirme işlevselliğinin parçalarını yeniden kullanmanıza ve bunları özel yardımınızda oluşturmanıza olanak tanır.
Yardım çıkışı şu şekilde görünür:
____ _ __ _ _
| _ \ ___ __ _ __| | __ _ / _| (_) | | ___
| |_) | / _ \ / _` | / _` | / _` | | |_ | | | | / _ \
| _ < | __/ | (_| | | (_| | | (_| | | _| | | | | | __/
|_| \_\ \___| \__,_| \__,_| \__,_| |_| |_| |_| \___|
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
yerine bölüm metni Spectre.Console
olarak yalnızca bir dize kullanmak istiyorsanız, önceki örnekteki Prepend
kodu aşağıdaki kodla değiştirin:
.Prepend(
_ => _.Output.WriteLine("**New command description section**")