命令行解析器动词无法识别

Posted

技术标签:

【中文标题】命令行解析器动词无法识别【英文标题】:CommandLine Parser verb not recognized 【发布时间】:2022-01-09 23:12:05 【问题描述】:

我正在使用命令行解析器来解析 2 个动词。这是一个代码sn-p:

 [Verb("Option1")]
 public class VerbOption1
 
     [Option('o', "option1")]
     public string Option1  get; set; 
 

 [Verb("Option2")]
 public class VerbOption2
 
     [Option('t', "option2")]
     public string Option2  get; set; 
 

Parser.Default.ParseArguments<VerbOption1, VerbOption2>(args)
 .WithParsed<VerbOption1>(option1 => doSomething(option1))
 .WithParsed<VerbOption2>(option2 => doSomethingElse(option2));

我遇到的问题是我收到一条错误消息,指出无法识别动词“x”。如果我只使用 1 个动词,那么它可以工作。但是,一旦我添加第二个动词,我就会收到此错误。

谁能帮助澄清发生了什么以及如何解决此错误?

我们将不胜感激。

谢谢

【问题讨论】:

我可能会离开,但是您检查过github.com/commandlineparser/commandline 上的示例吗?它使用 MapResult 方法:CommandLine.Parser.Default.ParseArguments(args) .MapResult( (AddOptions opts) => RunAddAndReturnExitCode(opts), (CommitOptions opts) => RunCommitAndReturnExitCode(opts), (CloneOptions opts) => RunCloneAndReturnExitCode(opts), errs => 1); 我查看了文档,但是,问题在于对 ParseArguement 的调用。为了使用 MapResult,ParseArguement 必须返回一个已解析的对象,而事实并非如此。在我调用 MapResult 之前,它失败了,动词无法识别。 您能否也包括您的“动词”的代码? VerbOption1 和 VerbOption2 好!你可以为你的问题写一个正确的答案,而不是把它放在 cmets 中。 【参考方案1】:

我发现了这个问题。确保分配给类的动词属性具有名称。在命令行中使用该名称,后跟您的选项。这对我来说是个问题。我正在使用命令行,就像我仍在处理单个动词一样,因此省略了动词名称。解析多个动词时需要动词名。

【讨论】:

以上是关于命令行解析器动词无法识别的主要内容,如果未能解决你的问题,请参考以下文章

Bash 脚本无法识别命令行参数? [复制]

无法识别来自命令行的 cppcheck

beautifulsoup 无法识别 lxml

webpack 无法识别命令行选项

Capistrano 3:运行自定义 shell 命令时无法识别捆绑器

命令行无法识别 Node-sass