.NET有哪些强大且易于使用的命令行工具?

7

忘掉花哨的网页内容。我正在寻找一个好的.NET CLI参数处理实用程序,最好是开源代码。这是为了快速而简单的实用程序,需要强大而友好的命令行参数处理。

这些实用程序可能只需要一天的工作量。投入几天时间编写良好的命令行处理似乎有些过度……但它们确实需要。

我喜欢命令行处理程序中的功能。如果有以下2或3个功能的任何开源项目,我将非常高兴。

  • 具有一致的语法,posix有一个很好的命令行标准,但不一定是posix。
  • 能够为参数提供简短的名称。例如,“msbuild /t” == “msbuild /target”
  • 支持良好的命令行解析,然后离开。我想要使用我的代码,而不是强加于我的代码模式的东西,例如我不想对事件的存在做出响应等等。
  • 关注点分离足够好,可以进行单元测试。
  • 哦,它读取类属性上的属性(如.NET配置类)是否过多要求?
  • 我喜欢msbuild中的配置文件覆盖。我可以在构建文件中设置属性,但可以在命令行上覆盖。
  • 内置“显示用法”。WSF文件(csript.exe)具有此功能。但我不想编写jscript来处理命令行。
  • 不是powershell。我找不到任何人在我的公司里能忍受Powershell的语法。

PS 如果我找不到这样的东西,我可能会在接下来的几周里在Google Code上发布一个。

PPS 如果我能添加标签,我会将其标记为“请帮我搜索互联网”。

5个回答

7

另外在codePlex上,CommandLine项目似乎符合您的要求。从该项目主页上大量复制/粘贴可以得到以下内容:

命令行解析器库为CLR应用程序提供了一个简单的编程接口,用于操作命令行输入。此库允许您以很高的自定义程度显示帮助屏幕。API承担了所有无聊的编码工作。

命令解析器库支持:

  • 短选项(例如 -s)

    • 选项+值/无空格:-sHello
    • 选项+空格+值:-s Hello
  • 像开关一样的短选项;不需要值

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

    • 选项+等号+值:--long=Hello
    • 选项+空格+值:--long Hello
  • 组成的选项(涉及值)

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

常见特性

两者都接受包含空格的值:-s"Hello World!" --long "Hello CLR!"


7

聪明的想法,但我实际上发现他们的“狡猾使用lambda”很烦人。不稳定。会借鉴一些想法。 - Precipitous
Mono.Options 真是太棒了 - http://devlicio.us/blogs/rob_reynolds/archive/2009/11/22/command-line-parsing-with-mono-options.aspx - ferventcoder

2

从CodePlex来看,ConsoleFX似乎符合您的要求。从该项目主页上大量复制/粘贴应用程序可以得到...

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

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

  • 强制执行命令行参数的顺序
  • 指定开关选项并限制其作为命令行参数出现的次数
  • 允许为开关选项指定参数,并限制可以指定的参数数量
  • 指定非开关参数及其使用方式
  • 在开关参数和非开关参数上运行自定义验证,包括正则表达式、文件掩码、整数、布尔值、枚举等测试。
  • 自动将非开关参数映射到强类型属性,以便更易读取
  • 执行无法通过ConsoleFx声明性执行的自定义验证

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


令人烦恼的是,主页和入门指南上的示例实际上无法编译/运行,您必须弄清楚新参数是什么。 - Matthew Lock
虽然这是一个不错的库,但说了这么多,我还是给它加上+1。 - Matthew Lock

0
我创建了一个命令行解析类,可以以(Linq)友好的方式为您进行解析。例如,这个命令行:
-country=Sweden -IsNiceCountry   -Country="The Netherlands" /empty= /space=" "

获取所有国家:
var parameters = new ParametersParser();
parameters.GetParameters("-country")

带有空字符串的参数:

parameters.GetFirstValue("/Empty")

键没有值:

parameters.HasKeyAndNoValue("-IsNiceCountry")

键不存在(返回 false):

parameters.HasKey("/notExist")

还有许多其他...


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接