对我来说,它使用上述方法有效,但前提是我在没有--help
-option 的情况下调用我的应用程序(例如MyApp batch
)。当我使用MyApp --help batch
行为时,正如您所描述的那样。
但是,我们似乎无法为help
-option 工作。
编辑:我设法通过修改以下代码来完成这项工作Commandline.Parser.cs
:
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;
}
问题出现在行
var verb = args.FirstOrDefault();
由于第一个参数 ( args[0]
) 被解释为动词或更好的动作(如文档中所述)verb
将始终在help
这里。因此,我们将 this 替换为args[1]
包含实际动词的内容,例如commit
。
EDIT2:为了使这项工作也适用,我们还应该从-character--help
中修剪第一个 arg ( )args[0]
-
if (string.Compare(args[0].Trim('-'), helpInfo.Right.LongName, GetStringComparison(_settings)) == 0)