C# 使用CommandLineParser报告未知参数

C# 使用CommandLineParser报告未知参数,c#,command-line,command-line-arguments,command-line-parser,C#,Command Line,Command Line Arguments,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; } [HelpOpt

有没有办法让报告成为未知参数

给定以下选项类别:

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--未知”调用程序时
我只得到默认使用信息,但没有提到是什么错误导致解析失败。我想让用户知道哪里出了问题。

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

长话短说:

如果在
GetUsage
方法中放置制动点,您将看到
LastParserState
不是null,而是包含0元素

LastParserState
基本上是从
LongOptionParser
(在您的案例中,由于
--
双破折号而涉及到它)没有在其解析方法中向
PostParsingState
集合添加任何内容:

资料来源:


因此,在内部,解析器不会存储任何关于出错原因的信息,只需记录这一事实。

我认为这将是一个有用的功能,因此我建议您创建一个功能请求,因为在这个问题上。谢谢!很好的分析。我检查了最后的ParserState,得出结论它不在那里。但是没有花时间通过源代码进行调试。请参阅源代码;它可能在当前开发分支中修复。链接已断开。作为参考,问题在
develope
分支中修复。此处的说明:
var parts = argumentEnumerator.Current.Substring(2).Split(new[] { '=' }, 2);
var option = map[parts[0]];

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