在Mono.Options中获取实际选项名称

时间:2016-03-22 18:22:43

标签: c# mono command-line-arguments options

我使用Mono.Options来解析CLI应用程序中的命令行标志。

为方便起见,许多选项都有几个别名,例如: "o|opt|option"。此外,Mono.Options允许用户使用不同的前缀来指定选项,例如-o/opt--option

是否有合理的方法来检索解析期间/之后为选项提供的实际名称?就我而言,这将是"-o""/opt""--option",具体取决于用户在命令行中提供的内容。

1 个答案:

答案 0 :(得分:0)

我没有通过Mono.Options'公共接口找到任何合理的方法。最好的结果是在解析时将实际选项名称传递给Action回调,但它不存在。

Mono.Options'选项原型解析机制也是非公开的。

我最终手动解析原型并在命令行参数中搜索任何选项别名以及所有可能的选项前缀(---/):< / p>

public static string GetProvidedName(string flagPrototype, IEnumerable<string> commandLineArguments)
{
    IEnumerable<string> flagNames = flagPrototype
        .Split('|')
        .Select(value => value.Replace("=", string.Empty).Replace(":", string.Empty))
        .SelectMany(flagName => 
            new string[] 
            {
                $"-{flagName}",
                $"--{flagName}",
                $"/{flagName}"
            });

    return commandLineArguments.First(argument => flagNames.Contains(argument));
}

我希望对想要解决同样问题的人有用。