5

Command Line Parser ライブラリに不明な引数を報告させる方法はありますか?

次のオプション クラスがあるとします。

public class Options
{
    [Option('i', "int-option", DefaultValue = 10, HelpText = "Set the int")]
    public int IntOption { get; set; }

    [ParserState]
    public IParserState LastParserState { get; set; }

    [HelpOption]
    public string GetUsage()
    {
        return HelpText.AutoBuild(this, 
            HelpText.DefaultParsingErrorsHandler(this, current));
    }
}

そして、次のプログラム:

var options = new Options();
var parser = new Parser(settings =>
{
    settings.HelpWriter = Console.Error;
    settings.IgnoreUnknownArguments = false;
});

if (parser.ParseArgumentsStrict(args, options))
{
    Console.WriteLine("Int value set: {0}", options.IntOption);
}

「MyProgram.exe --unknown」でプログラムを呼び出すと、デフォルトの使用情報が得られますが、どのエラーが原因で解析が失敗したかについては言及されていません。何がうまくいかなかったのか、ユーザーに何らかの兆候を示したいと思います。

4

1 に答える 1

3

簡単に言うと、現在の実装では、不明なオプションに関する情報を取得できません。

長い話:

メソッドにブレークポイントを設定すると、 null ではなく要素が 0 個含まれGetUsageていることがわかります。LastParserState

LastParserState基本的にArgumentParser.PostParsingStateから入力されますが、LongOptionParser(あなたの場合はダッシュが 2 つあるために関係します) は、その parse メソッド内--のコレクションに何も追加していません:PostParsingState

Githubからのソース:

var parts = argumentEnumerator.Current.Substring(2).Split(new[] { '=' }, 2);
var option = map[parts[0]];

if (option == null)
{
    return _ignoreUnkwnownArguments ? PresentParserState.MoveOnNextElement : 
                                      PresentParserState.Failure;
}

そのため、パーサーは内部的に何がうまくいかなかったかについての情報を保存せず、その事実を記録するだけです。

于 2013-03-03T20:18:46.887 に答える