Get it here.
Use it like so: public enum CatSpecies
{
Tabby,
Siamese,
Alley,
}
public class Options
{
public int NumberOfCats = 23;
public CatSpecies Species = CatSpecies.Siamese;
public bool ChaseTheCats;
public bool PostToYouTube;
}
class Program
{
static int Main(string[] args)
{
var options = new Options();
var parser = new CommandLineParser(options);
if (!parser.ParseCommandLine(args))
return 1;
DoStuff(options);
return 0;
}
}
You can run this program like so: MyProgram /NumberOfCats:10 /species:alley /posttoyoutube
It automatically generates usage help if you pass invalid values:[color="#008000"] > MyProgram /foo[/color]
[color="#000000"] Unknown option 'foo'
Usage: MyProgram
Options:
/NumberOfCats:value
/Species:value
/ChaseTheCats
/PostToYouTube[/color]
You can mark some options as required: public class Options
{
[CommandLineParser.Required]
public int NumberOfCats;
[CommandLineParser.Required]
public CatSpecies Species;
public bool ChaseTheCats;
public bool PostToYouTube;
}
Required options are specified without the /ParameterName: prefix: MyProgram 10 alley /posttoyoutube
Of course you will get an error if any required parameters are not specified.
The parser also supports list types, which allow a single parameter to be specified more than once (each entry will be appended to the list). For instance: public class Options
{
[CommandLineParser.Required]
public readonly List Names = new List();
[CommandLineParser.Name("Color")]
public readonly List Colors = new List();
}
This allows you to call: MyProgram shawn tracy rhys boo kess finch /color:red /color:white
Note that I was able to specify System.Drawing.Color values by string name (eg. "red"). This works because the parser uses TypeDescriptor/TypeConverter to convert string arguments into whatever types it finds in the Options object. If you have custom types, just write a matching TypeConverter and you'll be able to specify them directly as argument values.
Enjoy!
Source