/ / Analiza parametrów wiersza poleceń - c #, wiersz polecenia

Analiza parametrów wiersza poleceń - c #, wiersz polecenia

Próbuję utworzyć pewnego rodzaju automatyczne logowanie do mojej aplikacji za pomocą wiersza polecenia. W tym celu pomyślałem o następującym sposobie:

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

Po pierwsze: czy jest to prawidłowe podejście (pod względem nazewnictwa i przełączników?), A po drugie: jak mogę to przeanalizować?

Próbowałem tego w ten sposób, ale nie powiodło się (lub przynajmniej myślę, że zawiodłem, ponieważ muszę ręcznie wykonać operacje na łańcuchach):

    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;
}
}
}

Po drugie, jest to dość podatne na błędy. Nie mogę powiedzieć, czy przełącznik -u lub -p jest na pierwszym miejscu, więc obawiam się, że w końcu użyję hasła jako nazwy użytkownika i odwrotnie.

Odpowiedzi:

2 dla odpowiedzi № 1

Sugeruję użycie biblioteki innej firmy do analizy argumentów w wierszu poleceń - może to znacznie uprościć twoje życie.

Na przykład w Noda Time Używamy „Biblioteka parserów wiersza poleceń”, które w rzeczywistości osadzamy w źródleniż dodanie go jako odwołania do zestawu. Jest bardzo prosty w użyciu - wystarczy podać klasę z atrybutami, aby powiedzieć, która opcja wiersza poleceń odpowiada której właściwości. Możesz spojrzeć na opcje dla naszego kompilatora TZDB jako przykład.

Twoje potrzeby mogą się oczywiście różnić, ale jest prawdopodobneże istnieje biblioteka, która je zaspokoi - a jeśli jej nie ma, to sugeruje, że być może twoje wymagania są zbyt skomplikowane, aby można było użyć użytecznego wiersza poleceń, i możesz chcieć innego sposobu konfiguracji aplikacji, np. poprzez plik, który sam jest określony w wierszu poleceń.


2 dla odpowiedzi nr 2

Używam czegoś takiego https://github.com/fschwiet/ManyConsole jest to rozszerzenie NDesk.Options i naprawdę łatwe w użyciu do analizowania linii poleceń.

Przykład:

   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);