Поиск арсенала аргументов командной строки для .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 #

Ответ 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);
        }
    }
}

Изменить: Это мой проект, и поэтому этот ответ не следует рассматривать как подтверждение от третьей стороны. Тем не менее, я использую его для каждой программы на основе командной строки, которую я пишу, это с открытым исходным кодом, и я надеюсь, что другие могут извлечь из этого выгоду.