Robust and friendly command line tools for .NET?
Forget fancy shmancy web stuff. I'm looking for a good .NET CLI argument processing utility, prefer open source code. This is for quick and dirty utilities that need robust and friendly command line argument handling.
These are utilities with maybe a day of effort in them. Investing a few days writing good command line handling seems overkill ... but they really need it.
Features I like in command line handlers. I'd be thrilled with any open source project that had 2 or 3 of the following.
- A consistent syntax, posix had a nice command line standard, but not necessarily posix.
- Ability to provide short names for agruments. E.g. "msbuild /t" == "msbuild /target"
- It supports good command line parsing then gets out of the way. I want some that my code uses, not something that imposes a pattern on my code e.g. I don't want to have to respond to the presence of an arg with an event, that type of thing.
- Seperation of concerns is good enough that it's logic can be unit tested.
- Oh - is it two much to ask for it to read attributes off a class properties (as in .NET configuration classes)?
- I like the config file overrides in msbuild. I can set properties in a build file, but override on the command line.
- Built in "show usage". WSF files (csript.exe) have this functionality. I'm not willing to write jscript to get the command line handling though.
- Not powershell. I can't find anyone in my company who can stand Powershell syntax.
PS If I don't find such a thing, I'll probably drop one on google code in the next few weeks
PPS If I could add tags, I'd tag this "pleasesearchtheinternetforme"
Also from codePlex, the CommandLine project seems to meet your requirements. A Liberal application of copy/paste from the projects home page gives ...
The Command Line Parser Library offers to CLR applications a simple programming interface for manipulating command line input. This library allows you to display an help screen with a good degree of customization. The API keeps on its shoulders everything boring to code.
The Command Parser Library supports:
Short options (-s, for example)
- Option+Value/No space: -sHello
- Option+Space+Value: -s Hello
Short options like switches; no value required
- Option+Space+Option+....... -s -x -y -z
- Option+Option+Option+...: -sxyz...
- Option+Option+Space/Any Comb.: -sx -yz
Long options (--long, for example)
- Option+Equal+Value: --long=Hello
- Option+Space+Value: --long Hello
Composed options (its about values)
- any 1;2;3;4 (separator is configurable)
Both accepts values with spaces: -s"Hello World!" --long "Hello CLR!"
You should check out Mono.Options (http://www.ndesk.org/Options) since it is a lot more cross-platform friendly and used extensively in Mono itself.
From CodePlex, ConsoleFX seems to meet your requirements. A Liberal application of copy/paste from the projects home page gives ...
ConsoleFx is an attribute-based .NET/Mono framework for easily developing command-line interface (CLI) applications. It automates most of the work involved in creating a CLI application, like command line argument parsing, error handling and validations, all through the use of attributes. With ConsoleFx, you can say goodbye to lengthy cumbersome code to parse your command-line arguments.
Using the ConsoleFx commandline parser, you can declaratively specify a whole host of conditions for specifying command line arguments. These can include the ability to:
- Enforce the order of the command line arguments
- Specify switch options and limit the number of times they can occur as command-line arguments
- Allow parameters to be specified for switch options, and limit the number of parameters that can be specified
- Specify non-switch arguuments and how they are to be used
- Run custom validations on switch parameters and non-switch arguments, including tests for regular expressions, file masks, integers, booleans, enums, etc.
- Automatically map non-switch arguments to strong-typed properties for easier readability
- Perform custom validations that can not be performed by ConsoleFx declaratively
ConsoleFx also provides utility classes for console output capturing and extensions to the Console class. We plan to add other utility classes in the future, making it the all-in-one solution for creating your command-line applications.
Genghis (http://www.sellsbrothers.com/tools/genghis/) has one. Not sure about the maintenance status, though, and it may come with more baggage than you want.
I created a command line parsing class that does the pasing for you o a (Linq) friendly way. For example this command line:
-country=Sweden -IsNiceCountry -Country="The Netherlands" /empty= /space=" "
Get all countries:
var parameters = new ParametersParser(); parameters.GetParameters("-country")
Parmeter with empty string:
The key has no value:
Key does not exist (returns false):
And many more...