HelpVerbOption 不工作 - 命令行解析器 C#
Posted
技术标签:
【中文标题】HelpVerbOption 不工作 - 命令行解析器 C#【英文标题】:HelpVerbOption is not working - Command Line Parser C# 【发布时间】:2016-12-28 23:45:46 【问题描述】:我有一堂课:
class Options
// Remainder omitted (verb1, verb2, verb3)
[HelpVerbOption]
public string GetUsage(string verb)
return HelpText.AutoBuild(this, verb);
docs 说:
[...] 解析器也会将 null 传递给主类 GetUsage(string) 如果 用户请求帮助索引:
$ git 帮助
如果用户明确请求,则为动词命令 关于如何使用特定动词的说明:
$ git 帮助提交
[...]
然后,我输入了MyApp.exe help verb1
,但我只能看到基本帮助(看起来我输入了错误的动词,或者help
动词,或者其他什么)。相反,我希望它显示与指定动词相关的帮助信息。为什么它不能正常工作?
【问题讨论】:
【参考方案1】:对我来说,它使用上述方法有效,但前提是我在没有--help
-选项的情况下调用我的应用程序(例如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
。所以我们用包含 actual 动词的args[1]
替换它,例如commit
。
EDIT2:为了使 --help
工作,我们还应该从 -
-character 中修剪第一个 arg (args[0]
)
if (string.Compare(args[0].Trim('-'), helpInfo.Right.LongName, GetStringComparison(_settings)) == 0)
【讨论】:
你能帮我在我的项目中做这些改变吗?我使用CommanLine
作为库。所以我不能改变它的源代码。然后我从 git 克隆 repo 并尝试找到 TryParseHelpVerb
函数或 DisplayHelpVerbText
但找不到任何东西。我需要做什么?
下载源代码,适当修改并构建为库。
我应该注意的每个人:您需要更改和编译“稳定”分支。成功编译后,您需要替换“bin\debug”文件夹和“packages\CommandLineParser\lib\net45”文件夹中的库。祝你好运!以上是关于HelpVerbOption 不工作 - 命令行解析器 C#的主要内容,如果未能解决你的问题,请参考以下文章