8

私はクラスを持っています:

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

ドキュメントは言う:

[...] パーサーは、ユーザーが次のヘルプ インデックスを要求した場合にも、マスター クラス GetUsage(string) に null を渡します。

$ git ヘルプ

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

$ git ヘルプ コミット

[...]

次に、 と入力MyApp.exe help verb1しましたが、基本的なヘルプしか表示されませんでした (間違った動詞、help動詞、または何かを入力したようです)。むしろ、指定された動詞に関連するヘルプ メッセージが表示されることを期待しています。正常に動作しないのはなぜですか?

4

1 に答える 1

2

私にとっては、上記のアプローチを使用して機能しますが、 -option なしでアプリを呼び出した場合のみ--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

EDIT2:これを機能させるには、 -characterから最初の引数()--helpもトリミングする必要がありますargs[0]-

if (string.Compare(args[0].Trim('-'), helpInfo.Right.LongName, GetStringComparison(_settings)) == 0)
于 2016-09-06T11:06:09.867 に答える