/ Параметър на командния ред - синтактичен разбор - c #, команден ред

Parsing параметър на командния ред - c #, командния ред

Аз се опитвам да създам някакъв вид авто вход за моето заявление чрез командния ред. За това съм мислил по следния начин:

myapp.exe /autologin -u "Username" -p "Password"

Сега на първо място: Дали това е правилният подход (по отношение на именуване и ключове?) И второ: как мога да направя разбор на това?

Опитах го така, но не успях (или поне мисля, че не успях, защото трябва да извърша ръчно стринг операции):

    internal static void SetStartupArguments(List<string> arguments)
{
IsApplicationWarmup = arguments.Contains("/warmup");
IsApplicationAutoLogin = arguments.Contains("/autologin");

if (IsApplicationAutoLogin)
{
int autoLoginIndex = arguments.FindIndex(0, str => str == "/autologin");

if (arguments.Count >= autoLoginIndex + 1)
{
AutoLoginUser = arguments[autoLoginIndex + 1];
AutoLoginPassword = string.Empty;
}
}
}

Другото е, че това е доста склонно към грешки. Не мога да кажа дали ключът -u или -p е на първо място, така че страхът ми е, че ще използвам паролата като потребителско име и обратно.

Отговори:

2 за отговор № 1

Бих предложил използването на 3-та страна библиотека за анализ на командния ред аргумент - това може да направи живота ви много по-просто.

Например, в Noda Time ние използваме "Библиотека за анализ на командния ред", които всъщност по-скоро вграждаме в източникаотколкото да го добавите като справка за монтаж. Той е много лесен за използване - просто предоставяте клас с атрибути, за да кажете коя опция в командния ред съответства на коя собственост. опции за нашия компилатор TZDB като пример.

Вашите нужди могат да варират, разбира се, но е вероятноче има библиотека, която ще ги удовлетвори - и ако няма, това предполага, че може би вашите изисквания всъщност са твърде сложни за полезен команден ред и може да искате друг начин за конфигуриране на приложението ви, напр. чрез файл, който се посочва в командния ред.


2 за отговор № 2

Аз ще използвам нещо подобно https://github.com/fschwiet/ManyConsole неговото разширение на NDesk.Options и наистина лесен за използване за разбор на командните редове.

Пример:

   string data = null;
bool help   = false;
int verbose = 0;
var p = new OptionSet () {
{ "file=",      v => data = v },
{ "v|verbose",  v => { ++verbose } },
{ "h|?|help",   v => help = v != null },
};
List<string> extra = p.Parse (args);