使用CommandLine Parser Library标记所需的设置

时间:2013-03-04 18:47:37

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

使用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; }

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

即。有效的调用将包括具有以下一个选项的调用: "MyProgram --files a.txt""MyProgram --list-languages""MyProgram --list-plugins"

在没有或有多个选项的情况下调用: "MyProgram"(此案例是我的问题),"MyProgram --files a.txt --list-languages""MyProgram --list-languages --list-plugins"无效。

1 个答案:

答案 0 :(得分:2)

@PHeiberg, 您已将所有选项放在集Commands中,这与描述here一样正确。

通过这种方式,你告诉解析器:嘿,让用户选择其中一个!

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

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

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

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

说,我们知道存在Required属性及其相关性?

如果你将Required = true应用于一个或多个选项,那么(在实际实现中)与你的自我相矛盾并使解析器感到困惑。

随意打开一个问题。

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

也许这不是你想要的,无论如何这里都描述了here