Страницы

Поиск по вопросам

суббота, 13 октября 2018 г.

Как в консольном приложении разбирать параметры командной строки и выводить по ним справку

Нужно написать консольное приложение на С#, чтобы при вводе команды run -h выводилась справка с описанием команд.
static void Main(string[] args) { string command = string.Empty; if (args.Length != 0) { switch (args[0]) { case "-h": help(); break; } } }
private void run(string utilityName, string arguments) { try { clearOutput(); pr = new Process(); pr.StartInfo.FileName = utilityName; pr.StartInfo.Arguments = arguments; } catch () {} // ошибки }
public static help() { Console.WriteLine("-h help"); }


Ответ

Вручную аргументы командной строки парсить не надо. То, что вы напишете, практически наверняка будет будет обладать ограниченным функционалом и зоопарком багов. Не надо изобретать велосипед.
Если вам нужна работа с аргументами в более удобной форме, чем предоставленной string[] args в Main, Environment.CommandLine или Environment.GetCommandLineArgs, то вы можете воспользоваться одним из многочисленных пакетов с парсерами командной строки на NuGet. Они вам позволят интерпретировать аргументы как имена и значения, преобразуют типы значений, сгенерируют справку и т. п.
Любой парсер, который вы найдёте, будет выдавать пары аргумент-значение. Есть различия в поддерживаемом синтаксисе, типах аргументов, API (декларативные, императивные, ни рыба ни мясо), но базовый функцонал у всех единый.
Большой популярностью пользуется CommandLineParser, но я бы предостерёг от его использования: старая адекватная версия библиотеки заброшена и страдает от нескольких багов, новая версия переписана в совершенно упоротом стиле, неподдерживаема, и светлого будущего не видать. Список популярных библиотек:
CommandLineParser — самая популярная, самая упоротая FluentCommandLineParser — другая популярная PowerArgs — ещё одна популярная System.CommandLine — часть Core FX Lab от Microsoft, кандидат на включение в дотнет перенесена в архив Core FX Lab от Microsoft CommandLineUtils — изначально часть Microsoft ASP.NET MVC, сейчас поддерживается другим разрабом Всё, что вы найдёте на NuGet
Одни библиотеки ожидают от вас классов с атрибутами на свойствах, другие конфига, построенного с помощью fluent интерфейса, но в любом случае это будет сделать проще, чем изобрести велосипед, и вы получите более широкий функционал: генерацию справки, валидацию аргументов, строгую типизацию и т. п.

Комментариев нет:

Отправить комментарий