コマンドラインから私のアプリケーションのために何らかの自動ログインを作成しようとしていますが、これについては次のように考えました:
myapp.exe /autologin -u "Username" -p "Password"
まず最初に、これは正しいアプローチですか(命名とスイッチの面でですか?)、2番目:これをどのように解析できますか?
私はそのようにしようとしましたが、失敗しました(または、少なくとも私は文字列操作を手動で行う必要があるため、失敗したと思います):
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スイッチが最初に来るかどうかを知ることができないので、私はユーザー名としてパスワードを使用することになり、逆も同様です。
回答:
回答№1は2私は、コマンドライン引数の解析に第三者のライブラリを使用することをお勧めします - それはあなたの人生をはるかに簡単にすることができます。
たとえば、 野田時 を使用しております 「コマンドラインパーサーライブラリ」これは実際にソースに埋め込まれていますそれをアセンブリ参照として追加するよりも使い方はとても簡単です。クラスにどの属性に対応するコマンドラインオプションを指定するかを指定するだけです。 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);