8

を私はクラスを持っています(最後の部分で)thisドキュメントでHelpVerbOptionが動作しない - コマンドラインパーサのC#

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

は言う:

...パーサはにnullを渡しますマスタークラスGetUsage(文字列)も ユーザーはのヘルプインデックスを要求した場合:

$ gitのヘルプ

や動詞コマンド、ユーザが特定の動詞を使用する方法の明示的 の指示を要求した場合:

$ gitのヘルプはコミット

...私はタイプしようと

MyApp.exe help verb1をだけベースを参照してください助けてください(私が間違った動詞を入力するか、help動詞など)。しかし、私は特定の動詞に関連するヘルプメッセージを見たい。それはなぜ機能しないのですか?

あなたのアプリケーションでは、この機能は正常に機能していますか?

答えて

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; 
} 

問題は非常に最初の引数(args[0])として

var verb = args.FirstOrDefault(); 

ラインに表示されます動詞として解釈されるか、またはそれより良いアクション(ドキュメントに記載)verbは、常にhelpになります。したがって、args[1]に置き換えます。具体的には、動詞が含まれています(例:commit)。

EDIT2:また、我々はまた、

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

-character -から最初の引数(args[0])をトリミングする必要があり--helpために、この作品を作るためには、あなたは私のプロジェクトでこの変更を行うのを助けることができますか? 私は 'CommanLine'をライブラリとして使っています。だから私はそれをソースコードを変更することはできません。その後、私はgitからRepoをクローンし、 'TryParseHelpVerb'関数または' DisplayHelpVerbText'を見つけようとしますが、何も見つけられません。私は何をする必要がありますか? – gek0n

+1

ソースコードをダウンロードし、適切に変更してlibとしてビルドします。 – HimBromBeere

+0

誰もが気付くはずです: "stable"ブランチを変更してコンパイルする必要があります。コンパイルが成功したら、 "bin \ debug"フォルダと "packages \ CommandLineParser \ lib \ net45"フォルダにあるlibsを置き換える必要があります。がんばろう! – gek0n

関連する問題