2016-03-22 35 views
0

Mono.Optionsを使用して、CLIアプリケーションでコマンドラインフラグを解析しています。Mono.Optionsで実際のオプション名を取得

便宜上、多くのオプションにはいくつかの別名があります。 "o|opt|option"。さらに、Mono.Optionsは、異なる接頭辞を使用してオプションを指定することを可能にする。 -o,/optまたは--option

解析中または解析後にオプションとして指定された実際の名前を取得する方法はありますか?私の場合は、ユーザーがコマンドラインで提供した内容に応じて、"-o""/opt"または"--option"になります。

答えて

0

私はMono.Optionsのパブリックインターフェイスでこれを行うには妥当な方法が見つかりませんでした。最良の結果は、解析時にActionコールバックに渡された実際のオプション名を持つことですが、それだけではありません。

Mono.Options 'プロトタイプの解析メカニズムも非公開です。

私はプロトタイプを解析し、すべての可能なオプションの接頭辞(---、および/)と組み合わせるオプションのエイリアスのいずれかのコマンドライン引数を検索手動で終わった:

public static string GetProvidedName(string flagPrototype, IEnumerable<string> commandLineArguments) 
{ 
    IEnumerable<string> flagNames = flagPrototype 
     .Split('|') 
     .Select(value => value.Replace("=", string.Empty).Replace(":", string.Empty)) 
     .SelectMany(flagName => 
      new string[] 
      { 
       $"-{flagName}", 
       $"--{flagName}", 
       $"/{flagName}" 
      }); 

    return commandLineArguments.First(argument => flagNames.Contains(argument)); 
} 

私はそれがことを願っています同じ問題を解決しようとする人にとって有益です。

関連する問題