使用CommandLineParser报告未知参数

时间:2013-03-03 19:29:50

标签: c# command-line command-line-arguments command-line-parser

有没有办法让Command Line Parser library报告未知参数?

给出以下选项类:

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”调用程序时 我只是获取了默认的使用信息,但没有提到解析失败的错误。我想向用户说明出现了什么问题。

1 个答案:

答案 0 :(得分:3)

长话短说:使用当前的实现,您无法获得有关未知选项的任何信息。

长篇故事:

如果您在GetUsage方法中加入制动点,您会看到LastParserState不为空,但包含0个元素。

LastParserState基本上是从ArgumentParser.PostParsingState填充的,但是LongOptionParser --(由于PostParsingState双破折号而导致您涉及的情况)不会在其解析方法中向var parts = argumentEnumerator.Current.Substring(2).Split(new[] { '=' }, 2); var option = map[parts[0]]; if (option == null) { return _ignoreUnkwnownArguments ? PresentParserState.MoveOnNextElement : PresentParserState.Failure; } 集合中添加任何内容:

来自Github的来源:

{{1}}

因此,内部解析器不会存储任何有关错误的信息,只记录该事实。

相关问题