web-dev-qa-db-fra.com

Recherche d'un analyseur d'arguments de ligne de commande pour .NET

Je recherche un analyseur d'arguments de ligne de commande, tel que "Analyseur de ligne de commande" de http://www.sellsbrothers.com/tools/Genghis/ .

Fonctionnalités que je recherche:

  • Génération automatique de l'utilisation
  • Devrait pouvoir vérifier les paramètres obligatoires et facultatifs
  • Les paramètres doivent prendre en charge IEnumerable avec la prise en charge du séparateur
  • Devrait prendre en charge les paramètres d'indicateur
  • Serait bien de prendre en charge la combinaison de paramètres tels que "/ fx" == "/ f/x"
  • Ce serait bien de ne pas forcer pour un espace après un paramètre tel que "/ftest.txt" == "/ f test.txt"

PS: "Analyseur de ligne de commande" est assez bon, j'aime vraiment sa conception mais il n'y a pas de documentation, pas de nouvelles mises à jour et je n'arrivais pas à faire certaines choses comme comment pour vérifier les paramètres requis.

79
dr. evil

Ma bibliothèque d'analyse de ligne de commande tierce préférée est Command Line Parser et je suppose que c'est celle à laquelle vous faites référence. La version la plus récente remonte à moins de 2 mois et il y a des commits réguliers. Si vous voulez une offre plus mature, vous pouvez consulter la bibliothèque de la console dans le projet mono (désolé, je ne peux pas trouver de lien direct vers l'espace de noms pour le moment, mais cela fait partie du cadre mono)

52
Raoul

Jetez un œil à ndesk.options.

Il s'appelle Mono.Options maintenant.

20
John

Un analyseur de ligne de commande C populaire et assez complet est GNU getopt . Cela a été porté (ou cloné) plusieurs fois pour C # /. Net. Certains d'entre eux comprennent:

Faites votre choix! Il y en a plusieurs autres, et Google peut vous en parler,

5
Stewart

Malheureusement, il n'y a pas de support intégré pour gérer cela de manière standard. Avez-vous étudié PowerShell? Je parie qu'il y a une classe dans ce Shell qui fait exactement ce que vous voulez ou quelque chose de similaire.

4
John Leidegren
2
danyolgiax

Edit: comme le souligne fatcat1111, cette fonctionnalité n'est pas livrée avec la version finale de .net 4.0.

C # 4.0 en a une assez bonne. Probablement pas très utile pour le moment, mais vous voudrez peut-être envisager de regarder quelque chose qui facilitera le passage à celui intégré lorsqu'il sortira. Bart De Smet en a parlé sur son blog B #

2
Mike Two

J'utilise l'analyseur du livre de recettes C # 3.0.

Tous les exemples de ce livre peuvent être téléchargés ici: http://examples.oreilly.com/9780596516109/

Recherchez "Arguments" et vous le trouverez. Vous devez faire quelques petits changements de code pour le retirer de l'ensemble dans votre propre classe, mais ce n'est pas un gros problème.

Il prend en charge tous vos points sauf les deux derniers (combinaison de paramètres et espace manquant).

1
Oliver

La bibliothèque BizArk contient un analyseur de ligne de commande.

Fondamentalement, vous créez simplement une classe qui hérite de CmdLineObject, ajoutez des propriétés que vous souhaitez remplir à partir de la ligne de commande, ajoutez un CmdLineArgAttribute aux propriétés, puis appelez Initialize dans votre programme. Il prend également en charge les arguments URL ClickOnce!

Caractéristiques (du site) ...

  • Initialisation automatique: les propriétés de classe sont définies automatiquement en fonction des arguments de la ligne de commande.
  • Propriétés par défaut: envoyez une valeur sans spécifier le nom de la propriété.
  • Conversion de valeurs: utilise la puissante classe ConvertEx également incluse dans BizArk pour convertir les valeurs au type approprié.
  • Drapeaux booléens. Les indicateurs peuvent être spécifiés en utilisant simplement l'argument (ex,/b pour true et/b- pour false) ou en ajoutant la valeur true/false, yes/no, etc.
  • Tableaux d'arguments. Ajoutez simplement plusieurs valeurs après le nom de la ligne de commande pour définir une propriété définie comme un tableau. Ex,/x 1 2 3 remplira x avec le tableau {1, 2, 3} (en supposant que x est défini comme un tableau d'entiers).
  • Alias ​​de ligne de commande: une propriété peut prendre en charge plusieurs alias de ligne de commande. Par exemple, l'aide utilise l'alias?.
  • Reconnaissance partielle du nom. Vous n'avez pas besoin d'épeler le nom complet ou l'alias, juste assez pour que l'analyseur puisse lever l'ambiguïté de la propriété/des autres.
  • Prend en charge ClickOnce: peut initialiser les propriétés même lorsqu'elles sont spécifiées comme chaîne de requête dans une URL pour les applications déployées ClickOnce. La méthode d’initialisation en ligne de commande détectera s’il s’exécute en tant que ClickOnce ou non afin que votre code n’ait pas besoin de changer lors de son utilisation.
  • Crée automatiquement /? aide: Cela inclut un formatage agréable qui prend en compte la largeur de la console.
  • Charger/enregistrer des arguments de ligne de commande dans un fichier: cela est particulièrement utile si vous disposez de plusieurs grands ensembles complexes d'arguments de ligne de commande que vous souhaitez exécuter plusieurs fois.
1
Brian

Considérez qu'une fois que vous commencez à utiliser cet analyseur, vous devrez soit le maintenir vous-même, soit dépendre de quelqu'un d'autre pour le maintenir pour vous. Il vaudrait peut-être mieux que vous écriviez les vôtres, à partir de vos besoins les plus critiques et immédiats. J'ai constaté qu'il ne fallait pas trop de travail pour produire une analyse en ligne de commande assez compliquée pour la plupart des applications basées sur console sur lesquelles j'ai travaillé.

J'ai également constaté que lorsque l'analyse est trop compliquée, il peut être temps d'arrêter d'utiliser la ligne de commande.

1
John Saunders

Je parie que ce n'est pas tout à fait ce que vous cherchez, mais:

Quelqu'un ici a eu ce problème, et sa première pensée a été "hé, ocaml en a un assez bon!", Et l'a rapidement porté en F #.

1
Ken

Vous aimerez peut-être mon seul Rug.Cmd

Analyseur d'arguments de ligne de commande facile à utiliser et extensible. Poignées: Bool, Plus/Minus, String, String List, CSV, Enumeration.

Construit en '/?' mode d'aide.

Construit en '/ ??' et les modes de génération de document '/? D'.

static void Main(string[] args) 
{            
    // create the argument parser
    ArgumentParser parser = new ArgumentParser("ArgumentExample", "Example of argument parsing");

    // create the argument for a string
    StringArgument StringArg = new StringArgument("String", "Example string argument", "This argument demonstrates string arguments");

    // add the argument to the parser 
    parser.Add("/", "String", StringArg);

    // parse arguemnts
    parser.Parse(args);

    // did the parser detect a /? argument 
    if (parser.HelpMode == false) 
    {
        // was the string argument defined 
        if (StringArg.Defined == true)
        {
            // write its value
            RC.WriteLine("String argument was defined");
            RC.WriteLine(StringArg.Value);
        }
    }
}

Edit: Ceci est mon projet et en tant que telle, cette réponse ne doit pas être considérée comme une approbation d'un tiers. Cela dit, je l'utilise pour tous les programmes en ligne de commande que j'écris, c'est open source et j'espère que d'autres pourront en bénéficier.

0
Phill Tew

Je suis fan du port C # d'OptParse, une bibliothèque intégrée en Python. Il est plutôt simple à utiliser par rapport à la plupart des autres suggestions ici et contient un certain nombre de fonctionnalités utiles en plus de l'analyse automatique.

0
Daniel Goldberg