我有一个班级:
class Options
{
// Remainder omitted (verb1, verb2, verb3)
[HelpVerbOption]
public string GetUsage(string verb)
{
return HelpText.AutoBuild(this, verb);
}
}
在this文档中(在上一部分中)说:
...如果是,解析器也会将null传递给主类GetUsage(字符串) 用户请求帮助索引:
$ git help
如果用户明确请求,则使用或verb命令 关于如何使用特定动词的说明:
$ git help commit
...
我尝试键入:MyApp.exe help verb1
但只看到基本帮助(好像我键入了错误的动词,或help
动词或其他内容)。但我希望看到与指定动词相关的帮助消息。为什么它不起作用?
在您的应用程序中,它的功能是否正常工作?
答案 0 :(得分:2)
对我而言,它使用上述方法,但只有在没有--help
选项的情况下调用我的应用程序(例如MyApp batch
)。当我使用MyApp --help batch
时,行为就像你所描述的那样。
但是我们似乎无法为help
- 选项工作。
编辑:我设法通过修改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
} 这里。因此,我们将args[1]
替换为包含实际动词的commit
,例如--help
。
EDIT2:为了使这项工作适用于args[0]
,我们还应修剪-
字符
if (string.Compare(args[0].Trim('-'), helpInfo.Right.LongName, GetStringComparison(_settings)) == 0)
)
{{1}}