寻找.NET的命令行参数解析器

时间:2009-03-10 17:22:47

标签: c# .net command-line arguments

我正在寻找命令行参数解析器,例如来自http://www.sellsbrothers.com/tools/Genghis/的“命令行解析器”。

我正在寻找的功能:

  • 自动生成使用
  • 应该能够检查必需和可选参数
  • 参数应支持具有分隔符支持的IEnumerable
  • 应支持标志参数
  • 很高兴支持组合参数,例如“/ fx”==“/ f / x”
  • 在“/ftest.txt”==“/ f test.txt”
  • 之类的参数之后不强制空格会很好

P.S: “命令行解析器”非常好,我真的很喜欢它的设计,但没有文档,没有新的更新,我无法弄清楚如何检查所需的参数。

12 个答案:

答案 0 :(得分:52)

我个人最喜欢的第三方命令行解析库是Command Line Parser,我认为这是你所指的那个。最近发布的版本不到2个月,并且有定期提交。如果你想要一个更成熟的产品,你可以在单声道项目中删除控制台库(抱歉,我现在似乎无法找到命名空间的直接链接,但它是单声道框架的一部分)

答案 1 :(得分:20)

看看ndesk.options。

现在称为Mono.Options

答案 2 :(得分:5)

流行且相当全面的C命令行解析器是GNU getopt。这已被多次移植(或克隆)到C#/ .Net。其中一些包括:

选择你!还有其他几个,谷歌可以告诉你这些,

答案 3 :(得分:4)

可悲的是,没有内置支持以标准方式处理它。你看过PowerShell了吗?我打赌在那个shell中有一个类可以完全按照你想要的或类似的东西。

答案 4 :(得分:2)

编辑,因为fatcat1111指出,此功能未附带最终版本的.net 4.0。

C#4.0非常好。可能还不是很有帮助,但是你可能想要考虑一下这样的东西,当它出现时,它会使内置的内容变得容易。 Bart De Smet在他的谈话中谈到了这件事 B# blog

答案 5 :(得分:2)

答案 6 :(得分:1)

考虑一旦你开始使用这个解析器,你要么必须自己维护它,要么依赖别人为你维护它。从最关键,最直接的要求开始,您可能最好自己编写自己的。我发现,对于我所使用的大多数基于控制台的应用程序,生成一些相当复杂的命令行解析并不需要太多工作。

我还发现,当解析过于复杂时,可能是时候停止使用命令行了。

答案 7 :(得分:1)

我打赌这不是你想要的,但是:

这里有人有这个问题,他的第一个想法是“嘿,ocaml有一个非常好的!”,并迅速将其移植到F#。

答案 8 :(得分:1)

我正在使用C#3.0食谱中的解析器。

本书的所有例子都可以在这里下载: http://examples.oreilly.com/9780596516109/

搜索'参数',你会找到它。你必须做一些小的代码更改才能将它从整个事物中移除到你自己的类中,但这不是一个大问题。

它支持除最后两个点之外的所有点(参数组合和缺失空间)。

答案 9 :(得分:1)

BizArk library包含一个命令行解析器。

基本上,您只需创建一个继承自CmdLineObject的类,添加要从命令行填充的属性,将CmdLineArgAttribute添加到属性中,然后在程序中调用Initialize。它也支持ClickOnce URL参数!

功能(来自网站)......

  • 自动初始化:根据命令行参数自动设置类属性。
  • 默认属性:发送值而不指定属性名称。
  • 值转换:使用BizArk中包含的功能强大的ConvertEx类将值转换为正确的类型。
  • 布尔标志。可以通过简单地使用参数(ex,/ b表示true,/ b-表示false)或添加值true / false,yes / no等来指定标志。
  • 参数数组。只需在命令行名称后添加多个值即可设置定义为数组的属性。 Ex,/ x 1 2 3将使用数组{1,2,3}填充x(假设x被定义为整数数组)。
  • 命令行别名:属性可以支持多个命令行别名。例如,帮助使用别名?。
  • 部分名称识别。您不需要拼出全名或别名,只需拼写就足以让解析器消除其他属性/别名的歧义。
  • 支持ClickOnce:即使将属性指定为ClickOnce部署的应用程序的URL中的查询字符串,也可以初始化属性。命令行初始化方法将检测它是否以ClickOnce运行,因此您的代码在使用时无需更改。
  • 自动创建/?帮助:这包括考虑控制台宽度的漂亮格式。
  • 将命令行参数加载/保存到文件:如果您想要多次运行多个大型复杂的命令行参数,这将非常有用。

答案 10 :(得分:0)

我是OptParse的C#端口的粉丝,这是Python内置的库。与大多数其他建议相比,它使用起来相当简单,除了自动解析之外还包含许多有用的功能。

答案 11 :(得分:0)

您可能会喜欢我的Rug.Cmd

易于使用和可扩展的命令行参数解析器。句柄:Bool,加/减,字符串,字符串列表,CSV,枚举。

内置'/?'帮助模式。

内置'/ ??'和'/?D'文件生成器模式。

static void Main(string[] args) 
{            
    // create the argument parser
    ArgumentParser parser = new ArgumentParser("ArgumentExample", "Example of argument parsing");

    // create the argument for a string
    StringArgument StringArg = new StringArgument("String", "Example string argument", "This argument demonstrates string arguments");

    // add the argument to the parser 
    parser.Add("/", "String", StringArg);

    // parse arguemnts
    parser.Parse(args);

    // did the parser detect a /? argument 
    if (parser.HelpMode == false) 
    {
        // was the string argument defined 
        if (StringArg.Defined == true)
        {
            // write its value
            RC.WriteLine("String argument was defined");
            RC.WriteLine(StringArg.Value);
        }
    }
}

编辑:这是我的项目,因此这个答案不应被视为第三方的认可。也就是说,我确实将它用于我编写的每个基于命令行的程序,它是开源的,我希望其他人可以从中受益。