Аз се опитвам да създам някакъв вид авто вход за моето заявление чрез командния ред. За това съм мислил по следния начин:
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);