有没有办法让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”调用程序时 我只是获取了默认的使用信息,但没有提到解析失败的错误。我想向用户说明出现了什么问题。
答案 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}}
因此,内部解析器不会存储任何有关错误的信息,只记录该事实。