Страницы

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

понедельник, 9 декабря 2019 г.

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

#c_sharp


Нужно написать консольное приложение на С#, чтобы при вводе команды 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");
}

    


Ответы

Ответ 1



Вручную аргументы командной строки парсить не надо. То, что вы напишете, практически наверняка будет будет обладать ограниченным функционалом и зоопарком багов. Не надо изобретать велосипед. Если вам нужна работа с аргументами в более удобной форме, чем предоставленной 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 интерфейса, но в любом случае это будет сделать проще, чем изобрести велосипед, и вы получите более широкий функционал: генерацию справки, валидацию аргументов, строгую типизацию и т. п.

Ответ 2



IMHO, как только речь заходит о разборе параметров командной строки - первым делом нужно проверять есть ли для данной платформы/языка порт GNU getopt. Для этого случая - есть. Если хочется подробностей и разобраться как это работает - исходники очень хорошо откомментированы (комментариев и пояснений там реально больше, чем самого кода, всё разложено по полочкам и разжёвано в кашу).

Ответ 3



На, почитай вот это: https://commandline.codeplex.com Единственная проблема, я не владею C#, так что на вопросы очень слабо смогу поотвечать.

Ответ 4



using System.Collections.Generic; using System.IO; ... FileInfo fi = new FileInfo(Process.GetCurrentProcess().MainModule.FileName); List list = new List(Environment.GetCommandLineArgs()); Context.Parameters["assemblypath"] = "\"" + fi.FullName + "\" " + String.Join(" ", list.ToArray()).Trim();

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

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