使用CommandLineParser捕获控制台应用无名参数的实现方法咨询
解决方法
CommandLineParser原生支持捕获无选项前缀的位置参数,具体操作如下:
- 修改你的
ArgumentOptions参数配置类,添加用Value特性修饰的属性来接收无名参数:
using CommandLine; using System.Collections.Generic; public class ArgumentOptions { // 保留你原有定义的所有带前缀的选项,例如: [Option('v', "verbose", Required = false, HelpText = "启用详细输出")] public bool Verbose { get; set; } // 其他你已定义的-p、--restart等选项照常保留即可 // 新增属性捕获所有未匹配到选项前缀的位置参数 [Value(0)] public IEnumerable<string> UnnamedParams { get; set; } }
- 解析后直接读取该属性即可获取所有无名参数,你提供的参数示例中的
nginx就会被收集到UnnamedParams集合中:
.WithParsed<ArgumentOptions>(o => { // 遍历所有无名参数 foreach (var param in o.UnnamedParams) { Console.WriteLine($"无名参数:{param}"); } // 原有逻辑不变 });
补充说明
- 如果你有固定顺序的多个无名参数,可以分别定义多个带
Value特性的属性,索引从0开始递增:[Value(0)] public string ImageName { get; set; } // 第一个无名参数存镜像名 [Value(1)] public string Command { get; set; } // 第二个无名参数存启动命令 - 如果需要同时忽略未定义的带前缀选项,可以将Parser配置中的
IgnoreUnknownArguments设为true。
内容的提问来源于stack exchange,提问作者Lukas Gund
相关产品推荐
相关产品推荐

