A small collection of console tools for .NET.
You can use SmartCon to handle commandline arguments of console apps. There's no neet to parse the arguments, check fo a trailing dash etc.
usingSmartCon;privatestaticvoidMain(string[]args){varhandler=newArgumentProcessor();handler.RegisterArgument("h",(v)=>GetHelp());handler.RegisterArgument("f",(v)=>SetFilename(v));handler.RegisterPostProcessor(DoWork);handler.Process(args);}privatestaticvoidDoWork(){// ...}privatestaticvoidGetHelp(){// ...}privatestaticvoidSetFilename(stringfilename){// ...}The previous example will give you a console app, which accepts the commandline arguments -h and -f.
Parameters are specified with an equal-sign, for example -f=myfile.txt.
You can change the commandline style by setting the CommandlineDescription property:
varhandler=newArgumentProcessor();handler.CommandLineDescription=CommandLineDescription.CmdStyle;SmartCon defines the following styles:
Arguments are prefixed with a dash, parameters are separated by an equal-sign:
-f=myfile.txt
varhandler=newArgumentProcessor();handler.CommandLineDescription=CommandLineDescription.DefaultCommandLine;Arguments are prefixed with a dash, parameters are separated by a colon:
-f:myfile.txt
varhandler=newArgumentProcessor();handler.CommandLineDescription=CommandLineDescription.DotNetStyle;Arguments are prefixed with a forward-slash, parameters are separated by a space:
/f myfile.txt
varhandler=newArgumentProcessor();handler.CommandLineDescription=CommandLineDescription.CmdStyle;Arguments are prefixed with two dashes, parameters are separated by an equal-sign:
--f=myfile.txt
varhandler=newArgumentProcessor();handler.CommandLineDescription=CommandLineDescription.GnuStyle;SmartCon can also be set up to understand a command line style like npm. For example "npm adduser --registry=url" or "npm install package1 package2".
For a complete example see https://github.com/kenareb/SmartCon/tree/master/DemoNPM
SmartCon offers two possibilities of defining data for the commandline help.
Example:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionname="Help"type="SmartCon.Help.HelpSection, SmartCon" />
</configSections>
<startup>
<supportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.6.1" />
</startup>
<Help>
<Commands>
<addkey="f"arg="filename"description="Looks for the given file." />
<addkey="h"description="Shows this help page." />
</Commands>
</Help>
</configuration>To read the data from the App.Config use the following code:
classProgram{privatestaticSmartConsole_console=newSmartConsole();privatestaticvoidMain(string[]args){varhandler=newArgumentProcessor();handler.RegisterArgument("h",(v)=>GetHelp());handler.RegisterArgument("f",(v)=>SetFilename(v));handler.Process(args);}privatestaticvoidGetHelp(){varhp=newArgumentHelpProvider();varhelp=hp.GetDocumentation();_console.WriteLine();_console.WriteLine(help);Environment.Exit(0);}// ...}This will produce the following output:
C:\> .\Demo.exe -h
Usage: Demo -f=filename -h
-f=filename
Looks for the given file.
-h
Shows this help page.
To define the help with attributes use the following code:
[Documentation(Key="h",Description="Shows this help page.")][Documentation(Key="f",ArgumentExample="filename",Description="Looks for the given file.")]classProgram{privatestaticSmartConsole_console=newSmartConsole();privatestaticvoidMain(string[]args){varhandler=newArgumentProcessor();handler.RegisterArgument("h",(v)=>GetHelp());handler.RegisterArgument("f",(v)=>SetFilename(v));handler.Process(args);}privatestaticvoidGetHelp(){varhp=newArgumentHelpProvider(typeof(Program));varhelp=hp.GetDocumentation();_console.WriteLine();_console.WriteLine(help);Environment.Exit(0);}// ...}This will produce the following output:
C:\> .\Demo.exe -h
Usage: Demo -f=filename -h
-f=filename
Looks for the given file.
-h
Shows this help page.
Furhter description of how to process command line switches and how to set up command line help can be found on my blog posts SmartCon Part-1 and SmartCon Part-2.