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