2012-05-30 1 views
6

Sto utilizzando NDesk.Options per analizzare gli argomenti della riga di comando per un programma di riga di comando C#. Funziona bene, tranne che voglio che il mio programma esca senza successo e mostri l'output della guida, se l'utente include argomenti che non mi aspettavo.NDesk.Options - rileva argomenti non validi

sto parsing opzioni nel seguente modo:

var options = new OptionSet { 
    { "r|reset", "do a reset", r => _reset = r != null }, 
    { "f|filter=", "add a filter", f => _filter = f }, 
    { "h|?|help", "show this message and exit", v => _showHelp = v != null }, 
}; 

try 
{ 
    options.Parse(args); 
} 
catch (OptionException) 
{ 
    _showHelp = true; 
    return false; 
} 
return true; 

Con questo codice, se uso un argomento in modo improprio, come ad esempio specificando --filter senza =myfilter dopo che è poi NDesk.Options genera un OptionException e tutto andrà bene. Tuttavia, mi aspettavo anche che fosse lanciata una OptionException se avessi passato un argomento che non corrisponde alla mia lista, come ad esempio --someOtherArg. Ma questo non succede. Il parser lo ignora e continua a viaggiare su camion.

C'è un modo per rilevare argomenti inaspettati con NDesk.Options?

risposta

10

Il metodo OptionSet.Parse restituisce le opzioni non riconosciute in un List<string>. Puoi usarlo per segnalare opzioni sconosciute.

try 
{ 
    var unrecognized = options.Parse(args); 
    if (unrecognized.Any()) 
    { 
     foreach (var item in unrecognized) 
      Console.WriteLine("unrecognized option: {0}", item); 
     _showHelp = true; 
     return false; 
    } 
} 
catch (OptionException) 
{ 
    _showHelp = true; 
    return false; 
} 
return true; 
+0

Questo è il pezzo chiave che mi mancava. Grazie! – RationalGeek