For me it works using the mentioned approach, but only if I call my app without the --help
-option (for instance MyApp batch
). When I use MyApp --help batch
the behaviour is as described by you.
However we can´t seem to get the same to work for the help
-option.
EDIT: I managed to get this working by modifying the code of Commandline.Parser.cs
with the following:
private bool TryParseHelpVerb(string[] args, object options, Pair<MethodInfo, HelpVerbOptionAttribute> helpInfo, OptionMap optionMap)
{
var helpWriter = _settings.HelpWriter;
if (helpInfo != null && helpWriter != null)
{
if (string.Compare(args[0], helpInfo.Right.LongName, GetStringComparison(_settings)) == 0)
{
// User explicitly requested help
var verb = args.FirstOrDefault(); // <----- change this to args[1];
if (verb != null)
{
var verbOption = optionMap[verb];
if (verbOption != null)
{
if (verbOption.GetValue(options) == null)
{
// We need to create an instance also to render help
verbOption.CreateInstance(options);
}
}
}
DisplayHelpVerbText(options, helpInfo, verb);
return true;
}
}
return false;
}
The problem appears at the line
var verb = args.FirstOrDefault();
As the very first argument (args[0]
) is interpreteted as the verb or better the action (as described in the docs) verb
will allways be help
here. So we replace this by args[1]
which contains the actual verb, for example commit
.
EDIT2: To make this work for --help
also we should also trim the first arg (args[0]
) from the -
-character
if (string.Compare(args[0].Trim('-'), helpInfo.Right.LongName, GetStringComparison(_settings)) == 0)