731 votes

Meilleure façon d'analyser les arguments de ligne de commande en C#?

Lors de la construction d'applications de console qui prennent des paramètres, vous pouvez utiliser les arguments passés à l' Main(string[] args).

Dans le passé, j'ai simplement indexées en boucle ce tableau et fait un peu des expressions régulières pour extraire les valeurs. Toutefois, lorsque les commandes deviennent plus compliquées, l'analyse peut devenir assez laid.

Donc, je suis intéressé par:

  • Les bibliothèques que vous utilisez
  • Les modèles que vous utilisez

Assumer les commandes de toujours respecter des normes communes telles que la réponse ici.

324voto

jonp Points 10039

Je suggère fortement à l'aide de NDesk.Options (Documentation) et/ou Mono.Options (même API, autre espace de noms). Un exemple tiré de la documentation:

bool show_help = false;
List<string> names = new List<string> ();
int repeat = 1;

var p = new OptionSet () {
    { "n|name=", "the {NAME} of someone to greet.",
       v => names.Add (v) },
    { "r|repeat=", 
       "the number of {TIMES} to repeat the greeting.\n" + 
          "this must be an integer.",
        (int v) => repeat = v },
    { "v", "increase debug message verbosity",
       v => { if (v != null) ++verbosity; } },
    { "h|help",  "show this message and exit", 
       v => show_help = v != null },
};

List<string> extra;
try {
    extra = p.Parse (args);
}
catch (OptionException e) {
    Console.Write ("greet: ");
    Console.WriteLine (e.Message);
    Console.WriteLine ("Try `greet --help' for more information.");
    return;
}

197voto

Adrian Grigore Points 15993

J'aime vraiment la Ligne de Commande Analyseur de la Bibliothèque ( http://commandline.codeplex.com/ ). Il a une façon simple et élégante de la configuration des paramètres via les attributs:

class Options
{
    [Option("i", "input", Required = true, HelpText = "Input file to read.")]
    public string InputFile { get; set; }

    [Option(null, "length", HelpText = "The maximum number of bytes to process.")]
    public int MaximumLenght { get; set; }

    [Option("v", null, HelpText = "Print details during execution.")]
    public bool Verbose { get; set; }

    [HelpOption(HelpText = "Display this help screen.")]
    public string GetUsage()
    {
        var usage = new StringBuilder();
        usage.AppendLine("Quickstart Application 1.0");
        usage.AppendLine("Read user manual for usage instructions...");
        return usage.ToString();
    }
}

50voto

user7116 Points 39829

Le WPF TestApi bibliothèque est livré avec l'un des plus beaux de la ligne de commande analyseurs de développement C#. Je recommande fortement la recherche en elle, de Ivo Manolov blog sur l'API:

// EXAMPLE #2:
// Sample for parsing the following command-line:
// Test.exe /verbose /runId=10
// This sample declares a class in which the strongly-
// typed arguments are populated
public class CommandLineArguments
{
   bool? Verbose { get; set; }
   int? RunId { get; set; }
}

CommandLineArguments a = new CommandLineArguments();
CommandLineParser.ParseArguments(args, a);

24voto

abatishchev Points 42425

14voto

Brian Points 13596

Regarde comme tout le monde a leur propre animal de compagnie en ligne de commande analyseurs, figure je ferais mieux d'y ajouter la mienne :).

http://bizark.codeplex.com/

Cette bibliothèque contient une ligne de commande de l'analyseur qui permet d'initialiser une classe avec les valeurs de la ligne de commande. Il a une tonne de fonctionnalités (j'ai été à la bâtir sur de nombreuses années).

À partir de la documentation...

De ligne de commande d'analyse dans le BizArk cadre a ces principales caractéristiques:

  • Initialisation automatique: propriétés de la Classe sont automatiquement sur la base des arguments de ligne de commande.
  • Les propriétés par défaut: Envoyer une valeur sans spécifier le nom de la propriété.
  • La valeur de conversion: Utilise le puissant ConvertEx classe également inclus dans BizArk pour convertir des valeurs d'un type approprié.
  • Boolean indicateurs: indicateurs peuvent être spécifiés en utilisant simplement l'argument (ex, /b pour vrai et /b - pour de faux) ou en ajoutant de la valeur vrai/faux, oui/non, etc.
  • L'Argument des tableaux: Simplement ajouter plusieurs valeurs après le nom de ligne de commande pour définir une propriété qui est défini comme un tableau. Ex, /x 1 2 3 remplira x avec la matrice { 1, 2, 3 } (en supposant que x est défini comme un tableau d'entiers).
  • En ligne de commande alias: d'Une propriété peut prendre en charge plusieurs de ligne de commande alias. Par exemple, utilise l'alias ?.
  • Partielle de la reconnaissance du nom: Vous n'avez pas besoin de préciser le nom complet ou l'alias, juste en sort assez de l'analyseur de lever l'ambiguïté de la propriété/alias pour les autres.
  • Prend en charge ClickOnce: Pouvez initialiser des propriétés, même lorsqu'elles sont spécifiées comme la chaîne de requête dans l'URL de ClickOnce les applications déployées. La ligne de commande de l'initialisation de la méthode détecte s'il est ClickOnce ou pas si votre code n'a pas besoin de changer lors de l'utilisation.
  • Crée automatiquement /? aide: Cela inclut belle mise en forme qui prend en compte la largeur de la console.
  • Charger/Enregistrer les arguments de ligne de commande dans un fichier: Cette option est particulièrement utile si vous avez plusieurs de grandes, complexes ensembles d'arguments de ligne de commande que vous souhaitez exécuter plusieurs fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X