Поиск арсенала аргументов командной строки для .NET.
Я ищу парсер аргументов командной строки, например "Парсер синтаксиса команд" из http://www.sellsbrothers.com/tools/Genghis/.
Функции, которые я ищу:
- Автогенерация использования
- Необходимо проверить необходимые и необязательные параметры
- Параметры должны поддерживать IEnumerable с поддержкой разделителя.
- Следует поддерживать параметры флага
- Было бы неплохо поддерживать объединение таких параметров, как "/fx" == "/f/x"
- Было бы неплохо не форсировать пробел после параметра, например "/ftest.txt" == "/f test.txt"
P.S:
"Синтаксический анализатор командной строки" довольно хорош, мне очень нравится его дизайн, но нет никакой документации, новых обновлений, и я не мог понять, как это сделать, например, как проверить требуемые параметры.
Ответы
Ответ 1
Моя личная любимая сторонняя библиотека синтаксического анализа командной строки "Командная строка" , и я предполагаю, что это тот, о котором вы говорите. Самый последний выпуск был менее 2 месяцев назад, и есть регулярные коммиты. Если вы хотите более зрелые предложения, вы можете вырезать библиотеку консоли в монопроекте (извините, я не могу найти прямую ссылку на пространство имен на данный момент, но это часть моно-рамки)
Ответ 2
Посмотрите на ndesk.options.
Теперь он называется Mono.Options.
Ответ 3
Популярный и довольно всеобъемлющий синтаксический анализатор командной строки C - GNU getopt. Это было перенесено (или клонировано) для С#/.NET несколько раз. Некоторые из них включают:
Возьмите свой выбор! Есть несколько других, и Google может рассказать вам о них,
Ответ 4
К сожалению, нет встроенной поддержки для обработки этого стандартным образом. Вы заглянули в PowerShell? Уверен, что в этой оболочке есть класс, который делает именно то, что вы хотите или что-то подобное.
Ответ 5
Изменить:, как указывает fatcat1111, эта функция не поставлялась с окончательной версией .net 4.0.
С# 4.0 имеет довольно хороший. Наверное, пока не очень полезно, но вы можете подумать над тем, что сделает прыжок на встроенный в один простой, когда он выйдет. Барт де Смит говорил об этом на своем
Блог B #
Ответ 6
Я предлагаю NDesk.Options
смотрите здесь:
Лучший способ проанализировать аргументы командной строки на С#?
Ответ 7
Учтите, что как только вы начнете использовать этот синтаксический анализатор, вам придется либо поддерживать его самостоятельно, либо зависеть от кого-то другого, чтобы поддерживать его для вас. Возможно, вам лучше писать свои собственные, начиная с ваших самых важных, неотложных требований. Я обнаружил, что для выполнения довольно сложного синтаксического анализа командной строки для большинства консольных приложений, над которыми я работал, не требуется слишком много работы.
Я также обнаружил, что когда синтаксический анализ становится слишком сложным, возможно, пора прекратить использование командной строки.
Ответ 8
Я уверен, что это не совсем то, что вы ищете, но:
У кого-то здесь была эта проблема, и его первая мысль была "эй, у окамла очень хорошая!", и быстро портировал ее на F #.
Ответ 9
Я использую парсер из кулинарной книги С# 3.0.
Все примеры из этой книги можно скачать здесь:
http://examples.oreilly.com/9780596516109/
Найдите "Аргументы", и вы его найдете. Вы должны сделать некоторые небольшие изменения кода, чтобы избавиться от всего этого в свой собственный класс, но это не большая проблема.
Он поддерживает все ваши точки, кроме последних двух (объединение и отсутствие пробела).
Ответ 10
библиотека BizArk содержит синтаксический анализатор командной строки.
В принципе, вы просто создаете класс, который наследует CmdLineObject, добавляете свойства, которые вы хотите заполнить из командной строки, добавьте CmdLineArgAttribute в свойства, а затем вызовите Initialize в своей программе. Он также поддерживает аргументы URL ClickOnce!
Особенности (с сайта)...
- Автоматическая инициализация: свойства класса автоматически устанавливаются на основе аргументов командной строки.
- Свойства по умолчанию: отправьте значение без указания имени свойства.
- Преобразование значений. Использует мощный класс ConvertEx, также включенный в BizArk для преобразования значений в соответствующий тип.
- Булевы флаги. Флаги могут быть заданы простым использованием аргумента (ex,/b для true и /b - для false) или путем добавления значения true/false, yes/no и т.д.
- Аргументы массивов. Просто добавьте несколько значений после имени командной строки, чтобы установить свойство, которое определено как массив. Ex,/x 1 2 3 будет заполнять x массивом {1, 2, 3} (предполагая, что x определяется как массив целых чисел).
- Алиасы командной строки: свойство может поддерживать несколько псевдонимов командной строки. Например, Help использует псевдоним?.
- Частичное распознавание имен. Вам не нужно указывать полное имя или псевдоним, достаточно просто для синтаксического анализатора, чтобы устранить свойство/псевдоним от других.
- Поддержка ClickOnce: может инициализировать свойства, даже если они указаны как строка запроса в URL-адресе для развертываемых приложений ClickOnce. Метод инициализации командной строки определит, работает ли он как ClickOnce или нет, поэтому ваш код не нуждается в изменении при его использовании.
- Автоматически создает /? help: Это включает хорошее форматирование, которое учитывает ширину консоли.
- Загрузить/сохранить аргументы командной строки в файл: Это особенно полезно, если у вас есть несколько больших сложных наборов аргументов командной строки, которые вы хотите запускать несколько раз.
Ответ 11
Я поклонник порта С# для OptParse, встроенной библиотеки на Python. Он довольно прост в использовании по сравнению с большинством других предложений здесь и содержит ряд полезных функций в дополнение к простому автоматическому анализу.
Ответ 12
Вам может понравиться мой Rug.Cmd
Простой в использовании и расширяемый синтаксический анализатор командной строки. Ручки: Bool, Plus/Minus, String, String List, CSV, Enumeration.
Построено в '/?' режим справки.
Построено в '/??' и '/? D'.
static void Main(string[] args)
{
// create the argument parser
ArgumentParser parser = new ArgumentParser("ArgumentExample", "Example of argument parsing");
// create the argument for a string
StringArgument StringArg = new StringArgument("String", "Example string argument", "This argument demonstrates string arguments");
// add the argument to the parser
parser.Add("/", "String", StringArg);
// parse arguemnts
parser.Parse(args);
// did the parser detect a /? argument
if (parser.HelpMode == false)
{
// was the string argument defined
if (StringArg.Defined == true)
{
// write its value
RC.WriteLine("String argument was defined");
RC.WriteLine(StringArg.Value);
}
}
}
Изменить: Это мой проект, и поэтому этот ответ не следует рассматривать как подтверждение от третьей стороны. Тем не менее, я использую его для каждой программы на основе командной строки, которую я пишу, это с открытым исходным кодом, и я надеюсь, что другие могут извлечь из этого выгоду.