C# 用于.NET的强大且友好的命令行工具?

C# 用于.NET的强大且友好的命令行工具?,c#,.net,vb.net,command-line,mono,C#,.net,Vb.net,Command Line,Mono,忘掉那些花里胡哨的网页吧。我正在寻找一个好的.NET CLI参数处理实用程序,更喜欢开源代码。这适用于需要健壮、友好的命令行参数处理的快速而肮脏的实用程序 这些是可能需要一天努力的实用程序。花几天时间编写好的命令行处理似乎有些过头了。。。但他们真的需要它 我喜欢命令行处理程序中的功能。如果任何开源项目有以下两个或三个,我都会非常兴奋 语法一致,但不一定是posix 能够为耕地提供短名称。例如,“msbuild/t”=“msbuild/target” 它支持良好的命令行解析,然后就不再妨碍了。我

忘掉那些花里胡哨的网页吧。我正在寻找一个好的.NET CLI参数处理实用程序,更喜欢开源代码。这适用于需要健壮、友好的命令行参数处理的快速而肮脏的实用程序

这些是可能需要一天努力的实用程序。花几天时间编写好的命令行处理似乎有些过头了。。。但他们真的需要它

我喜欢命令行处理程序中的功能。如果任何开源项目有以下两个或三个,我都会非常兴奋

  • 语法一致,但不一定是posix
  • 能够为耕地提供短名称。例如,“msbuild/t”=“msbuild/target”
  • 它支持良好的命令行解析,然后就不再妨碍了。我想要我的代码使用的一些,而不是在我的代码上强加模式的东西,例如,我不想用事件之类的东西来响应arg的存在
  • 关注点的分离足够好,它的逻辑可以进行单元测试
  • 哦-要求它读取类属性的属性(如.NET配置类中的属性)有两个要求吗
  • 我喜欢msbuild中的配置文件覆盖。我可以在生成文件中设置属性,但可以在命令行上重写
  • 内置的“显示用法”。文件(cscript.exe)具有此功能。不过,我不愿意编写jscript来获得命令行处理
  • 不是地狱。我在公司里找不到任何人能忍受Powershell语法
PS如果我找不到这样的东西,我可能会在接下来的几周内在谷歌代码上放一个

PPS如果我可以添加标签,我会从CodePlex中将此标签标记为“pleasesearchtheinternetforme”

,似乎符合您的要求。从项目主页复制/粘贴的自由应用程序提供

ConsoleFx是一个基于属性的.NET/Mono框架,用于轻松开发命令行界面(CLI)应用程序。它自动化了创建CLI应用程序所涉及的大部分工作,如命令行参数解析、错误处理和验证,所有这些都是通过使用属性实现的。使用ConsoleFx,您可以告别冗长而繁琐的代码来解析命令行参数

使用ConsoleFx命令行解析器,您可以声明性地指定用于指定命令行参数的全部条件。这些能力包括:

  • 强制命令行参数的顺序
  • 指定开关选项并限制它们作为命令行参数出现的次数
  • 允许为开关选项指定参数,并限制可以指定的参数数量
  • 指定非开关参数及其使用方式
  • 对开关参数和非开关参数运行自定义验证,包括对正则表达式、文件掩码、整数、布尔值、枚举等的测试
  • 自动将非开关参数映射到强类型属性,以提高可读性
  • 执行ConsoleFx无法以声明方式执行的自定义验证
ConsoleFx还提供用于捕获控制台输出的实用程序类以及对控制台类的扩展。我们计划在将来添加其他实用程序类,使其成为创建命令行应用程序的一体式解决方案。

Genghis()有一个。虽然不确定维护状态,但它可能会带来比您想要的更多的行李。

同样来自codePlex,该项目似乎满足您的要求。从项目主页复制/粘贴的自由应用程序提供

命令行解析器库为CLR应用程序提供了一个用于操作命令行输入的简单编程接口。此库允许您显示具有良好自定义程度的帮助屏幕。API将所有枯燥的代码都放在自己的肩上

命令分析器库支持:

  • 短选项(-s,例如)

    • 选项+值/无空格:-sHello
    • 选项+空格+值:-s您好
  • 短选项,如开关;不需要任何值

    • 选项+空格+选项+-s-x-y-z
    • 选项+选项+选项+…:-sxyz
    • 选项+选项+空间/任意梳。:/sx-yz
  • 长选项(--Long,例如)

    • 选项+相等+值:--long=Hello
    • 选项+空格+值:--long Hello
  • 组合选项(关于值)

    • 任何1;2.3.4(可配置分隔符)
共同特征


两者都接受带空格的值:-s“Hello World!”--long“Hello CLR!”

您应该查看Mono.Options(),因为它对跨平台友好得多,并且在Mono本身中广泛使用

我创建了一个以(Linq)友好的方式为您执行PASSING的程序。例如,此命令行:

-country=Sweden -IsNiceCountry   -Country="The Netherlands" /empty= /space=" "
让所有国家:

var parameters = new ParametersParser();
parameters.GetParameters("-country")
带空字符串的参数:

parameters.GetFirstValue("/Empty")
该键没有值:

parameters.HasKeyAndNoValue("-IsNiceCountry")
密钥不存在(返回false):


还有更多…

聪明的想法,但我发现他们“巧妙地使用lambda”令人讨厌。不稳定。将窃取一些想法。Mono的大事件。选项-令人恼火的是主页上的示例和入门指南实际上没有编译/工作,你必须弄清楚新的参数是什么,例如,这里描述的描述方法在当前版本中不存在,并且没有对论坛帖子的回应,尽管它是一个很好的库,已经说了这么多了
parameters.HasKey("/notExist")