NDesk Options
Writing a console app?
I don't know if it's deprecated now or what but I still love ndesk options.
It's a single file that you drop in your console application, and then you can parse options joyfully.
Example from an early version of NimbleText.
using Mono.Options; // Beautiful Console argument parsing!
...
var p = new OptionSet() {
    { "d|rawdata=",         "the raw input data", v => settings.InputData = v},
    { "p|pattern=",         "the pattern", v => settings.InputPattern = v},
    { "i|inputdatafile=",   "a filename for loading the input data", v => settings.InputDataFile = v},
    { "s|pipeline",         "Stream input data via the pipeline", v => settings.Pipeline = v != null},
    { "f|patternfile=",     "a filename for loading a pattern", v => settings.InputPatternFile = v},
    { "r|rowdelim=",        "the row delimiter", v => settings.RowDelimiter = v},
    { "c|coldelim=",        "the column delimiter", v => settings.ColumnDelimiter = v},
    { "o|outputfile=",      "a filename to store the results", v => settings.ResultsFile = v},
    { "g|gui",              "show the Graphical User Interface", v => show_gui = v != null},
    { "?|h|help",           "show this message and exit", v => show_help = v != null },
};
try
{
    unprocessedArgs = p.Parse(args);
}
And to show help (display all options) -- it's as easy as:
Console.WriteLine("Options:");
p.WriteOptionDescriptions(Console.Out);
But in the common case that you're trying to detect that an invalid option was received, you might do this first.
if (p.UnrecognizedOptions != null && p.UnrecognizedOptions.Count > 0)
{
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("\r\nError. Unrecognized commandline option" + (p.UnrecognizedOptions.Count > 1 ? "s" : "") + ".");
    Console.ResetColor();
    foreach (var s in p.UnrecognizedOptions)
    {
        Console.Write("Unrecognized: ");
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine(s);
        Console.ResetColor();
    }
    Console.WriteLine("Please see below for all valid options.");
}