使用CommandLine Parser配置多verb时出现verb未识别错误如何解决
问题成因
- 你使用的CommandLine Parser版本过旧,部分1.x版本存在多Verb注册的兼容性bug,多Verb场景下只能识别第一个传入的泛型参数对应的Verb
- Verb名称大小写匹配问题,默认配置下CommandLine Parser的Verb匹配是大小写敏感的,如果你命令行输入的verb大小写和
[Verb]属性里定义的不一致就会触发未识别错误,单个Verb时你可能刚好匹配了大小写所以没触发 - 命令行参数传入格式错误,多Verb场景下要求第一个参数必须是精确的Verb名称,不能带前缀(比如不能加
-或者/),如果你给Verb加了参数前缀就会被识别为普通选项而非Verb,导致匹配失败
解决方案
- 升级CommandLine Parser到最新稳定版,目前2.9+版本已经完全修复多Verb匹配的相关bug
- 关闭Verb大小写敏感校验,在初始化Parser时传入配置参数,代码如下:
var parser = new Parser(config => { config.CaseSensitive = false; // 可选:如果需要忽略未知选项可以加 config.IgnoreUnknownArguments = true; }); parser.ParseArguments<VerbOption1, VerbOption2>(args) .WithParsed<VerbOption1>(option1 => doSomething(option1)) .WithParsed<VerbOption2>(option2 => doSomethingElse(option2));
- 检查命令行调用格式,正确的调用示例如下:
调用Option1的示例:yourApp.exe Option1 -o testValue
调用Option2的示例:yourApp.exe Option2 -t testValue2
注意Verb名称Option1/Option2前不需要加任何参数前缀 - 如果还是存在问题,可以添加错误处理逻辑打印详细的错误信息,方便定位:
Parser.Default.ParseArguments<VerbOption1, VerbOption2>(args) .WithParsed<VerbOption1>(option1 => doSomething(option1)) .WithParsed<VerbOption2>(option2 => doSomethingElse(option2)) .WithNotParsed(errors => { foreach(var err in errors) { Console.WriteLine(err.ToString()); } });
内容的提问来源于stack exchange,提问作者tsage080667
相关产品推荐
相关产品推荐

