【问题标题】:Marking required set required with CommandLine Parser Library使用命令行解析器库标记所需的集合
【发布时间】:2013-02-18 23:14:38
【问题描述】:

使用Command Line Parser Library,有没有办法标记一组说 3 个选项并准确地制作所需的三个选项之一?

所以有这些选项:

[Option("list-plugins", MutuallyExclusiveSet = "Commands")]
public bool ListPLugins { get; set; }

[Option("list-languages", MutuallyExclusiveSet = "Commands")]
public bool ListLanguages { get; set; }

[OptionList('f', "files", ',', MutuallyExclusiveSet = "Commands")]
public IList<string> Files { get; set; }

我希望用户一次只能使用一个。

I.E.有效调用将包括具有以下选项之一的调用: "MyProgram --files a.txt"、"MyProgram --list-languages" 和 "MyProgram --list-plugins"

while 调用不带或带多个选项: "MyProgram"(这种情况是我的问题),"MyProgram --files a.txt --list-languages" 和 "MyProgram --list-languages --list-plugins" 将无效。

【问题讨论】:

    标签: c# command-line command-line-arguments command-line-parser


    【解决方案1】:

    @PHeiberg, 您已将所有选项放入集合 Commands 中,正如 here 所述,这是正确的。

    这样你就告诉解析器:嘿,让用户选择其中之一!。

    如果添加绑定到另一个集合的另一个选项:

    [Option MutuallyExclusiveSet = "Other"]
    public int Offsets { get; set; }
    

    您可以根据需要指定它,但Commands 集中的选项是互斥的。

    根据实际设计,您所要求的仍然不存在(但可以实现)。

    也就是说,我们知道存在一个Required 属性以及它是如何关联的?

    如果您将Required = true 应用于多个选项之一,那么您(在实际实现中)会自相矛盾并混淆解析器。

    随时提出问题。

    实际实现支持动词命令。请注意,动词命令在设计上是互斥的,您必须窥视一个(您想要的选项行为)。

    也许这不是你想要的,反正这里是描述here。

    【讨论】:

    • 谢谢。我也是这么理解的。我认为动词命令结构不适合这种情况,因为程序只有一个实际命令,另外两个是帮助的变体。我有一些关于如何做的想法。当我有更多时间时,我会打开一个问题。
    猜你喜欢
    • 2013-11-14
    • 2011-01-17
    • 2014-01-04
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多