8

我有一个类:HelpVerbOption不起作用 - 命令行分析器C#

class Options 
{ 
    // Remainder omitted (verb1, verb2, verb3) 
    [HelpVerbOption] 
    public string GetUsage(string verb) 
    { 
    return HelpText.AutoBuild(this, verb); 
    } 
} 

this文档(最后一部分)说:

...解析器将传递null大师班GetUsage(串)此外,如果 用户请求帮助索引中:

$ git的帮助

或者如果用户要求对如何使用特定的动词明确 说明动词命令:

$ git的帮助犯

...

我想类型:MyApp.exe help verb1,但只看到基地帮助(好像我输入错误的动词,或者动词help,或其他)。但我想看到与指定动词相关的帮助信息。为什么它不起作用?

在您的应用程序中,它的功能工作正常吗?

回答

2

对我来说,它适用于上述方法,但前提是我没有使用--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。所以我们用args[1]替代它,其中包含实际的动词,例如commit

EDIT2:为了使这项工作--help还我们也应该修剪掉-的第一个参数(args[0])字符数限制

if (string.Compare(args[0].Trim('-'), helpInfo.Right.LongName, GetStringComparison(_settings)) == 0) 
+0

你能不能帮我做这件事改变了我的项目? 我使用'CommanLine'作为库。所以我不能改变它的源代码。然后我从git克隆回购,并尝试找到'TryParseHelpVerb'函数或'DisplayHelpVerbText',但找不到任何东西。我需要做什么? – gek0n

+1

下载源代码,适当更改并将其构建为lib。 – HimBromBeere

+0

对于我需要注意的每个人:您需要更改并编译“稳定”分支。当它成功编译时,需要替换“bin \ debug”文件夹和“packages \ CommandLineParser \ lib \ net45”文件夹中的那些库。祝你好运! – gek0n