2016-05-02 19 views
0

Wie kann man Legacy C# commadnline-Tools effizient konvertieren, um Subparser zu verwenden? Insbesondere interessiert mich der Fall einer effizienten Migration von Legacy-Commadline-Tools, von denen einige Hunderte von Parametern nebeneinander haben, die nicht zusammen gehören.Wie kann man Legacy-C# -Commandline-Tools effizient konvertieren, um Subparser zu verwenden?

In Python kann man eine subparser using the ArgParse Bibliothek erstellen, und dies kann eine effiziente Trennung monolithischer CLIs ermöglichen. Was sind einige gleichwertige empfohlene Methoden in C#?

Für diejenigen, die mit subparsers nicht vertraut sind, erlauben Sie mir, ein Beispiel zu zeigen. Stellen Sie sich ein Programm foo.exe mit einem Positionsargument vor, das barone oder bartwo sein kann und jedes seine eigenen Argumente hat. Ich möchte eine CLI-Erfahrung wie diese haben:

>> foo.exe 

foo.exe [barone|bartwo] 
error: missing first positional argument. 

>> foo.exe barone 

foo.exe barone [--baronevariable:<value>] 
error: missing --baronevariable argument value 

Die Legacy-Programme, die ich bin Umwandlung werden die Wintellect ICmdArgs Schnittstelle alle implementiert, und alle haben eine Erfahrung wie:

>> foo.exe 
barone    Some barone info 
bartwo    Some bartwo info 
--baroneVariable Some barone variable info 
--bartwoVariableOne Some bartwo variable one info 
etc..... 

Mit Das Wintellect-ICmdArg-Modell scheint keine spezifische Schnittstelle zu haben, um zu sagen, dass für Barone eine spezifische Variable --baronevariable - benötigt wird.

Ich suche weder nach einer Paketempfehlung noch bestreite ich die Trivialität einer solchen Aufgabe in der Zusammenfassung, da Leute, die diese Frage lesen, eine Klarstellung wünschen. Stattdessen möchte ich herkömmliche Befehlszeilentools mit Hunderten von Parametern relativ effizient konvertieren. Irgendwelche konstruktiven Empfehlungen?

+0

Dieses etwas ausführlicher muss. Fragen Sie nach Argumentparsing-Bibliotheken? Das ist besonders off-topic für SO, ganz zu schweigen von bereits gestellten, beantworteten und geschlossenen [hier] (http://stackoverflow.com/questions/491595/best-way-to-parse-command-line-arguments-in- c? rq = 1). Oder fragen Sie, ob ein bestimmtes Verhalten in einer Bibliothek verfügbar ist? Wenn Letzteres, bitte beschreiben Sie das spezifische Verhalten. Wie es jetzt ist, ist die Frage ziemlich unklar. –

+0

Wenn Sie mit 'prebaked' in der Base Class Library meinen, ich glaube nicht, dass es etwas gibt, aber es gibt [viele Bibliotheken von Drittanbietern] (http://nugetmusthaves.com/Tag/CommandLine). –

+0

@MikeMcCaughan Hier ist ein Beispiel CLI, das ich möchte. Es ist ein Programm namens foo.exe, mit einem Positionsargument, das [barone | bartwo] sein kann, und jeder von diesen hat einige Parameter unabhängig von dem anderen. Wenn man also 'foo' eintippt, würde man so etwas wie 'foo [barone | bartwo]' drucken und 'foo barone' eingeben würde etwas wie 'foo barone [- baroneparam] missing param' ergeben. –

Antwort

0

Ich habe Plossum CommandLine zuvor verwendet. Es ist praktisch. Die letzte Version ist von 2011, also könnte es etwas "aktuelleres" geben, obwohl ich denke, dass sich in der Welt der Befehlszeilenanalyse nichts viel geändert hat.

Es gibt SO answer suggeriert (stark): NDesk.Options Ich denke, die 300+ Stimmen sind ein gutes Zeichen.

Es gibt andere Kommandozeilen-Parsing-Tool für C# auch, wie: https://commandline.codeplex.com/