用于.NET的强大而友好的命令行工具?

时间:2009-05-10 05:01:55

标签: c# .net vb.net command-line mono

忘记花哨的shmancy web东西。我正在寻找一个好的.NET CLI参数处理实用程序,更喜欢开源代码。这适用于需要强大而友好的命令行参数处理的快速而脏的实用程序。

这些是实用工具,可能需要一天的努力。投入几天编写良好的命令行处理似乎有点过分......但他们确实需要它。

我喜欢在命令行处理程序中使用的功能。我对任何有2个或3个以下的开源项目感到非常兴奋。

  • 一致的语法posix had a nice command line standard,但不一定是posix。
  • 能够为agruments提供简短名称。例如。 “msbuild / t”==“msbuild / target”
  • 支持良好的命令行解析,然后不再使用。我想要一些我的代码使用的东西,而不是在我的代码上强加模式的东西,例如我不想要回应一个事件的存在,这种事情。
  • 关注点的分离足够好,它的逻辑可以进行单元测试。
  • 哦 - 要求它从类属性中读取属性(在.NET配置类中)是多少?
  • 我喜欢msbuild中的配置文件覆盖。我可以在构建文件中设置属性,但在命令行上覆盖。
  • 内置“show usage”。 WSF个文件(csript.exe)具有此功能。我不愿意写jscript来获得命令行处理。
  • 不是powershell。我在公司里找不到任何能够使用Powershell语法的人。

PS如果我没有找到这样的话,我可能会在接下来的几周里放弃谷歌代码

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

5 个答案:

答案 0 :(得分:7)

同样来自codePlex,CommandLine项目似乎符合您的要求。自由应用项目主页的复制/粘贴提供了......

Command Line Parser Library为CLR应用程序提供了一个简单的编程接口,用于操作命令行输入。此库允许您显示具有良好自定义程度的帮助屏幕。 API保留了对代码无聊的一切。

Command Parser Library支持:

  • 短选项(例如-s)

    • 选项+值/无空格:-sHello
    • 选项+空格+值:-s Hello
  • 交换机等短期选项;没有必要的价值

    • 选项+空格+选项+ ....... -s -x -y -z
    • 选项+选项+选项+ ...: - -sxyz ...
    • 选项+选项+空格/任意组合:-sx -yz
  • 长选项(例如, - long)

    • 选项+等于+值: - long = Hello
    • Option + Space + Value: - long Hello
  • 组合选项(关于值)

    • 任何1; 2; 3; 4(分隔符可配置)

常用功能

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

答案 1 :(得分:7)

你应该查看Mono.Options(http://www.ndesk.org/Options),因为它更加跨平台友好,并在Mono本身广泛使用。

答案 2 :(得分:2)

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

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

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

  • 强制执行命令行参数的顺序
  • 指定开关选项并限制它们作为命令行参数发生的次数
  • 允许为开关选项指定参数,并限制可指定的参数数量
  • 指定非切换参数以及如何使用
  • 对交换机参数和非交换机参数运行自定义验证,包括正则表达式,文件掩码,整数,布尔值,枚举等的测试。
  • 自动将非切换参数映射到强类型属性以便于阅读
  • 以声明方式执行ConsoleFx无法执行的自定义验证

ConsoleFx还提供了用于控制台输出捕获和Console类扩展的实用程序类。我们计划在未来添加其他实用程序类,使其成为创建命令行应用程序的一体化解决方案。

答案 3 :(得分:0)

成吉思(http://www.sellsbrothers.com/tools/genghis/)有一个。但是不确定维护状态,它可能带来比你想要的更多的行李。

答案 4 :(得分:0)

我创建了一个command line parsing class,为你做了一个(林克)友好的方式。例如,此命令行:

-country=Sweden -IsNiceCountry   -Country="The Netherlands" /empty= /space=" "

获取所有国家/地区:

var parameters = new ParametersParser();
parameters.GetParameters("-country")

空字符串的参数:

parameters.GetFirstValue("/Empty")

密钥没有价值:

parameters.HasKeyAndNoValue("-IsNiceCountry")

Key不存在(返回false):

parameters.HasKey("/notExist")

还有更多......