Парсер Командной Строки на .NET
Передача аргументов командной строки в приложение - очень распространённая задача. Вы можете вручную их разбирать, но, если у вас много параметров, это может быть утомительно и подвержено ошибкам.
CommandLineParser
Это библиотека с открытым исходным кодом, созданная Эриком Ньютоном и членами сообщества .NET. Он существует с 2005 года и его скачали более 26 миллионов раз! CommandLineParser «предлагает приложениям CLR чистый и лаконичный API для управления аргументами командной строки и связанными с этим задачами, такими как определение переключателей, обязательных и необязательных параметров и команд».
Вместо того, чтобы вручную анализировать массив строк
args, вы можете просто определить класс, который будет анализироваться библиотекой, на основе набора атрибутов, которыми вы аннотируете класс.using CommandLine;Это практически всё, что требуется для использования этой библиотеки.
public class CmdLineOpts {
[Value(index: 0, Required = true,
HelpText = "File path.")]
public string Path { get; set; }
[Option(shortName: 'c',
longName: "confidence", Required = false,
HelpText = "Minimum confidence.", Default = 0.9f)]
public float Confidence { get; set; }
}
ValueAttribute и OptionAttribute предоставляются пакетом. Здесь первый параметр обязательный, а второй необязательный, который можно передать через короткое -с или длинное --confidence имя. Использование:using CommandLine;Парсер автоматически разбирает аргументы. Более того, из подсказок в атрибутах свойств класса автоматически генерируется страница справки, которая выдаётся при возникновении ошибок или вызовом приложения с параметром
static async Task<int> Main(string[] args) {
return await Parser.Default
.ParseArguments<CmdLineOpts>(args)
.MapResult(async (CmdLineOpts opts) => {
try {
//аргументы разобраны, используем их
return await AnalyzeFileAsync(
opts.Path, opts.Confidence);
}
catch {
Console.WriteLine("Error!");
return -1;
}
},
errs => Task.FromResult(-1));
}
--help.Итого
Пакет NuGet CommandLineParser - очень мощный помощник, который упрощает часто повторяющуюся задачу разбора аргументов до простого декларативного подхода. Кроме того, он гораздо более гибкий, чем пример, продемонстрированный здесь. Вы можете найти его документацию на их странице GitHub Wiki.
Источник: https://devblogs.microsoft.com/pax-windows/command-line-parser-on-net5/