PHe*_*erg 5 c# command-line command-line-arguments command-line-parser
有没有办法让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));
}
}
Run Code Online (Sandbox Code Playgroud)
以下程序:
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);
}
Run Code Online (Sandbox Code Playgroud)
使用"MyProgram.exe --unknown"调用程序时,我只获取默认的使用信息,但没有提到解析失败的错误.我想向用户提供一些错误的指示.
长话短说:在当前的实现中,您无法获得有关未知选项的任何信息。
长话短说:
如果将制动点放入GetUsage方法中,您将看到LastParserState不为 null,但包含 0 元素。
LastParserState基本上是从ArgumentParser.PostParsingState填充的,但是LongOptionParser(在您的情况下由于--双破折号而涉及) 没有在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;
}
Run Code Online (Sandbox Code Playgroud)
因此,解析器内部不会存储任何有关出错原因的信息,只是记录该事实。
| 归档时间: |
|
| 查看次数: |
2221 次 |
| 最近记录: |