/ / Parâmetros da linha de comando - c #, linha de comando

Análise de parâmetros de linha de comando - c #, linha de comando

Estou tentando criar algum tipo de login automático para o meu aplicativo através da linha de comando. Para isso, pensei na seguinte maneira:

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

Agora, antes de mais nada: esta é a abordagem correta (em termos de nomeação e comutação?) E segundo: como posso fazer a análise disso?

Eu tentei assim, mas falhei (ou pelo menos acho que falhei porque tenho que fazer manualmente operações de string):

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

A outra coisa é que isso é propenso a erros. Não sei dizer se a opção -u ou -p vem primeiro, então meu medo é que eu acabe usando a senha como nome de usuário e vice-versa.

Respostas:

2 para resposta № 1

Eu sugeriria o uso de uma biblioteca de terceiros para análise de argumentos da linha de comando - isso pode tornar sua vida muito mais simples.

Por exemplo, em Hora Noda nós usamos "Biblioteca do Analisador de Linha de Comando", que realmente incorporamos na fontedo que adicioná-lo como uma referência de montagem. É muito simples de usar - você apenas fornece uma classe com atributos para dizer qual opção de linha de comando corresponde a qual propriedade. Você pode olhar para o opções para o nosso compilador TZDB como um exemplo.

Suas necessidades podem variar, é claro, mas é provávelque existe uma biblioteca que irá satisfazê-los - e, se não houver, isso sugere que talvez seus requisitos sejam realmente muito complicados para uma linha de comando útil, e você pode querer alguma outra maneira de configurar seu aplicativo, por exemplo. através de um arquivo que é especificado na linha de comando.


2 para resposta № 2

Eu usaria algo como https://github.com/fschwiet/ManyConsole é uma extensão do NDesk.Options e realmente fácil de usar para analisar linhas de comando.

Exemplo:

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