Beim Erstellen von Konsolenanwendungen, die Parameter annehmen, können Sie die übergebenen Argumente verwenden Main(string[] args)
.
In der Vergangenheit habe ich dieses Array einfach indiziert / geloopt und einige reguläre Ausdrücke verwendet, um die Werte zu extrahieren. Wenn die Befehle jedoch komplizierter werden, kann das Parsen ziemlich hässlich werden.
Ich interessiere mich also für:
- Von Ihnen verwendete Bibliotheken
- Von Ihnen verwendete Muster
Angenommen, die Befehle entsprechen immer den allgemeinen Standards, wie sie hier beantwortet werden .
c#
.net
command-line-arguments
Paul Stovell
quelle
quelle
Antworten:
Ich würde dringend empfehlen, NDesk.Options ( Dokumentation ) und / oder Mono.Options (gleiche API, unterschiedlicher Namespace) zu verwenden. Ein Beispiel aus der Dokumentation :
quelle
git checkout master
), oder ihre Argumente sind nicht flexibel (dh sie unterstützen nicht--foo 123
=--foo=123
=-f 123
=-f=123
und auch-v -h
=-vh
).Ich mag die Command Line Parser Library ( http://commandline.codeplex.com/ ) sehr. Es hat eine sehr einfache und elegante Möglichkeit, Parameter über Attribute einzurichten:
quelle
--recursive
zu unterstützen.Die WPF TestApi-Bibliothek enthält einen der schönsten Befehlszeilen-Parser für die C # -Entwicklung. Ich empfehle dringend, einen Blick darauf zu werfen , aus Ivo Manolovs Blog über die API :
quelle
Schauen Sie sich http://github.com/mono/mono/tree/master/mcs/class/Mono.Options/ an.
quelle
Sieht so aus, als hätte jeder seine eigenen Pet-Kommandozeilen-Parser, ich sollte auch meine hinzufügen :).
http://bizark.codeplex.com/
Diese Bibliothek enthält einen Befehlszeilenparser , der eine Klasse mit den Werten aus der Befehlszeile initialisiert. Es hat eine Menge Funktionen (ich habe es über viele Jahre aufgebaut).
Aus der Dokumentation ...
Das Parsen von Befehlszeilen im BizArk-Framework bietet folgende Hauptfunktionen:
quelle
Ich habe vor einiger Zeit einen Parser für C # -Befehlszeilenargumente geschrieben. Es ist unter: http://www.codeplex.com/CommandLineArguments
quelle
CLAP (Befehlszeilenargument-Parser) verfügt über eine verwendbare API und ist wunderbar dokumentiert. Sie erstellen eine Methode, indem Sie die Parameter mit Anmerkungen versehen. https://github.com/adrianaisemberg/CLAP
quelle
myapp myverb -argname argvalue
(muss haben-argname
) odermyapp -help
(häufig--help
).Für dieses Problem gibt es zahlreiche Lösungen. Der Vollständigkeit halber und um die Alternative bereitzustellen, wenn jemand dies wünscht, füge ich diese Antwort für zwei nützliche Klassen in meine Google-Codebibliothek ein .
Die erste ist ArgumentList, die nur für das Parsen von Befehlszeilenparametern verantwortlich ist. Es sammelt Name-Wert-Paare, die durch die Schalter '/ x: y' oder '-x = y' definiert sind, und sammelt auch eine Liste von 'unbenannten' Einträgen. Die grundlegende Verwendung wird hier besprochen . Sehen Sie sich die Klasse hier an .
Der zweite Teil davon ist der CommandInterpreter, der aus Ihrer .Net-Klasse eine voll funktionsfähige Befehlszeilenanwendung erstellt. Als Beispiel:
Mit dem obigen Beispielcode können Sie Folgendes ausführen:
-- oder --
Es ist so einfach oder so komplex, wie Sie es brauchen. Sie können den Quellcode überprüfen , die Hilfe anzeigen oder die Binärdatei herunterladen .
quelle
Ich mag das , weil Sie "Regeln definieren" können für die Argumente, benötigt oder nicht, ...
oder wenn Sie ein Unix-Typ sind, könnte Ihnen der GNU Getopt .NET- Port gefallen .
quelle
Vielleicht gefällt dir mein einziger Rug.Cmd
Einfach zu verwendender und erweiterbarer Befehlszeilenargument-Parser. Handles: Bool, Plus / Minus, String, String-Liste, CSV, Aufzählung.
Eingebaut in '/?' Hilfemodus.
Eingebaut in '/ ??' und '/? D' Dokumentgenerator-Modi.
Bearbeiten: Dies ist mein Projekt und als solches sollte diese Antwort nicht als Bestätigung durch einen Dritten angesehen werden. Das heißt, ich benutze es für jedes Kommandozeilen-basierte Programm, das ich schreibe, es ist Open Source und ich hoffe, dass andere davon profitieren können.
quelle
Unter http://www.codeplex.com/commonlibrarynet gibt es einen Parser für Befehlszeilenargumente
Es kann Argumente mit
1. Attributen
2. expliziten Aufrufen
3. einer einzelnen Zeile mit mehreren Argumenten ODER einem String-Array analysieren
Es kann mit folgenden Dingen umgehen:
- config : Qa - startdate : $ { today } - region : 'New York' Settings01
Es ist sehr einfach zu bedienen.
quelle
Dies ist ein Handler, den ich basierend auf der Novell-
Options
Klasse geschrieben habe.Diese richtet sich an Konsolenanwendungen, die eine
while (input !="exit")
Stilschleife ausführen , beispielsweise eine interaktive Konsole wie eine FTP-Konsole.Anwendungsbeispiel:
Und die Quelle:
quelle
Mein persönlicher Favorit ist http://www.codeproject.com/KB/recipes/plossum_commandline.aspx von Peter Palotas:
quelle
Ich bin kürzlich auf die FubuCore-Befehlszeilen-Parsing-Implementierung gestoßen, die mir sehr gut gefällt. Die Gründe dafür sind:
Unten finden Sie ein einfaches Beispiel für die Verwendung. Um die Verwendung zu veranschaulichen, habe ich ein einfaches Dienstprogramm geschrieben, das zwei Befehle enthält: - add (fügt einer Liste ein Objekt hinzu - ein Objekt besteht aus einem Namen (Zeichenfolge), einem Wert (int) und einem booleschen Flag) - list (Listen) alle aktuell hinzugefügten Objekte)
Zuerst habe ich eine Befehlsklasse für den Befehl 'add' geschrieben:
Dieser Befehl verwendet eine CommandInput-Instanz als Parameter, daher definiere ich Folgendes:
Der nächste Befehl ist 'list', der wie folgt implementiert wird:
Der Befehl 'list' akzeptiert keine Parameter, daher habe ich eine NullInput-Klasse dafür definiert:
Jetzt müssen Sie nur noch die Main () -Methode wie folgt verkabeln:
Das Programm funktioniert wie erwartet und druckt Hinweise zur korrekten Verwendung, falls Befehle ungültig sind:
Und eine Beispielverwendung für den Befehl 'add':
quelle
Powershell Commandlets.
Von Powershell durchgeführte Analyse basierend auf den in den Commandlets angegebenen Attributen, Unterstützung für Validierungen, Parametersätze, Pipelining, Fehlerberichterstattung, Hilfe und am besten die Rückgabe von .NET-Objekten zur Verwendung in anderen Commandlets.
Ein paar Links, die ich für den Einstieg hilfreich fand:
quelle
C # CLI ist eine sehr einfache Parsing-Bibliothek für Befehlszeilenargumente, die ich geschrieben habe. Es ist gut dokumentiert und Open Source.
quelle
Readme.mkd
Datei imDocumentation
Ordner).Dschingis Befehlszeilen-Parser ist vielleicht etwas veraltet, aber er ist sehr vollständig und funktioniert für mich ziemlich gut.
quelle
Ich würde die Open-Source-Bibliothek CSharpOptParse vorschlagen . Es analysiert die Befehlszeile und hydratisiert ein benutzerdefiniertes .NET-Objekt mit der Befehlszeileneingabe. Ich wende mich immer an diese Bibliothek, wenn ich eine C # -Konsolenanwendung schreibe.
quelle
Bitte verwenden Sie den .net-Port der Apache Commons Cli API. Das funktioniert super.
http://sourceforge.net/projects/dotnetcli/
und die ursprüngliche API für Konzepte und Einführung
http://commons.apache.org/cli/
quelle
Eine sehr einfache, benutzerfreundliche Ad-hoc-Klasse für die Befehlszeilenanalyse, die Standardargumente unterstützt.
quelle