И как его использовать.
Основная закавыка - я вижу, как указать параметру, является ли он обязательным (=) необязательным (:) или просто параметром без значения
я не вижу, как указать программе, чтобы параметр встерчался только один раз (и такая ошибка вероятно не выводится как ошибка)
Commands can be forced to show the user the help text by throwing an exception of type: ConsoleHelpAsException
There are a handful of methods you can call from the derived class's constructor to add metadata to the command. Use autocompete to find them.
Multi-Arguments
Inheriting the delegate philosophy, defining multi-arguments is nothing special,
but the delegate will be executed multiple times, so adding the values to a list is easy enough.
Interactivity
ability to interpret interactive commands ļonsole-mode commands
Вообще говоря, проектов на github очень много
C++-ники рекомендуют boost program options.
умеет кучу всякого: и параметры, и через переменные окружения, и через response-файлы
Как вообще парсят параметры?
Ну, если параметры описаны как-то (например есть специальный язык docopt.org)
и программа описывается как-то (при помощи reflection)
то между двумя этими описаниями можно задать связи (откуда брать, куда класть)
эти связи могут быть описаны с помощью некоего синтаксиса. Многие предпочитают использовать синтаксис языка и разбирать его стандартным компилятором языка,
для того, чтобы программист, использующий библиотеку был в своей тарелке.
Какие бывают фичи:
синглтон, чтобы не создавать объект "var par = new Parameters();"
остаётся только вызвать Singleton.Parser.Parse(argv) вместо par.Parse(argv);
остальной код можно разметить например аттрибутами и тогда Parse разложит распарсенное куда надо и ошибки отработает и отрепортит и справку выведет...
Если есть связка между описанием артефакта из входных данных и описанием программного кода, который этот артефакт будет хранить,
то можно сократить описание артефакта и перестать указывать тип артефакта, так как этот тип можно извлечь из описания программного кода
это относится в частности к boolean типам
Куда в таком подходе укладывать EBNF? В глобальный атрибут?
Как будет происходить локализация текстов сообщений? (очевидно ресурсами, эти ресурсы должны быть упомянуты в том глобальном атрибуте?)