2016-03-22 10 views
0

Ich verwende Mono.Options, um Befehlszeilen Flags in einer CLI-Anwendung zu analysieren.Erhalten Sie den tatsächlichen Optionsnamen in Mono.Options

Der Einfachheit halber haben viele Optionen mehrere Aliase, z. "o|opt|option". Ferner ermöglicht es Mono.Options, eine Option unter Verwendung verschiedener Präfixe, z. -o, /opt oder --option.

Gibt es eine vernünftige Möglichkeit, den tatsächlichen Namen, der während/nach dem Parsen für eine Option geliefert wurde, abzurufen? In meinem Fall wäre das "-o", "/opt" oder "--option", je nachdem, was der Benutzer in der Befehlszeile angegeben hat.

Antwort

0

Ich habe keine vernünftige Möglichkeit gefunden, dies über Mono.Options öffentliche Schnittstelle zu tun. Das beste Ergebnis wäre, dass der Name der tatsächlichen Option beim Analysieren in den Callback Action übergeben wird, aber er ist einfach nicht da.

Mono.Options 'Option Prototyp Parsing-Mechanismus ist auch nicht öffentlich.

ich manuell den Prototyp Parsen beendet und die Befehlszeilenargumente für eine der Option Aliase Suche mit allen möglichen Option Präfixen kombiniert (-, -- und /):

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

Ich hoffe, es wird nützlich für jemanden, der das gleiche Problem lösen möchte.