C# 正在查找.NET的命令行参数解析器

C# 正在查找.NET的命令行参数解析器,c#,.net,command-line,arguments,C#,.net,Command Line,Arguments,我正在寻找一个命令行参数解析器,比如来自的“命令行解析器” 我正在寻找的功能: 自动生成使用 应能检查所需和可选参数 参数应支持带分隔符的IEnumerable 应该支持标志参数 最好支持组合参数,例如“/fx”=“/f/x” 最好不要在参数“/ftest.txt”==“/f test.txt”后强制输入空格 附言: “命令行解析器”非常好,我非常喜欢它的设计,但是没有文档,没有新的更新,我也不知道如何做某些事情,比如如何检查所需的参数。遗憾的是,没有内置的支持以标准方式处理它。你调查过Po

我正在寻找一个命令行参数解析器,比如来自的“命令行解析器”

我正在寻找的功能:

  • 自动生成使用
  • 应能检查所需和可选参数
  • 参数应支持带分隔符的IEnumerable
  • 应该支持标志参数
  • 最好支持组合参数,例如“/fx”=“/f/x”
  • 最好不要在参数“/ftest.txt”==“/f test.txt”后强制输入空格
附言:
“命令行解析器”非常好,我非常喜欢它的设计,但是没有文档,没有新的更新,我也不知道如何做某些事情,比如如何检查所需的参数。

遗憾的是,没有内置的支持以标准方式处理它。你调查过PowerShell吗?我敢打赌,在这个shell中有一个类,它可以完成您想要的或类似的功能。

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


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

我个人最喜欢的第三方命令行解析库是,我想这就是您所指的。最近的版本是不到2个月前发布的,并且有定期提交。如果您想要更成熟的产品,可以在mono项目中选择console库(很抱歉,目前我似乎找不到指向名称空间的直接链接,但它是mono框架的一部分)

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


这里有人遇到了这个问题,他的第一个想法是“嘿,ocaml有一个非常好的工具!”,然后很快将它移植到了F#。

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

本书中的所有示例可在此处下载:

搜索“参数”,你会找到它。您必须对代码进行一些小的更改,才能将整个过程转换到您自己的类中,但这不是什么大问题


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

请查看ndesk.options


它现在被称为。

是一种流行且相当全面的C命令行解析器。这已经为C#/.Net移植(或克隆)了好几次。其中包括:

  • 在freshmeat.net上
  • 在PHPGuru
  • 论代码工程
  • 论代码工程
  • 关于码丛

你挑吧!还有其他一些功能,谷歌可以告诉你,

编辑:正如fatcat1111所指出的,这项功能没有随.net 4.0的最终版本一起提供

C#4.0有一个非常好的版本。也许还不是很有帮助,但是你可能想考虑一下当它出来的时候,它会跳进一个简单的东西。巴特·德斯米特在他的演讲中谈到了这件事

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

包含一个命令行解析器

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

功能(来自网站)

  • 自动初始化:根据命令行参数自动设置类属性
  • 默认属性:在不指定属性名称的情况下发送值
  • 值转换:使用BizArk中包含的功能强大的ConvertEx类将值转换为适当的类型
  • 布尔标志。可以通过简单地使用参数(例如,/b表示true和/b-表示false)或通过添加值true/false、yes/no等来指定标志
  • 参数数组。只需在命令行名称后添加多个值即可设置定义为数组的属性。例如,/x123将用数组{1,2,3}填充x(假设x被定义为整数数组)
  • 命令行别名:属性可以支持多个命令行别名。例如,“帮助”使用别名
  • 部分名称识别。您不需要拼出全名或别名,只需拼出足够的拼写就可以让解析器将属性/别名与其他属性/别名区分开来
  • 支持ClickOnce:即使在ClickOnce部署的应用程序的URL中将属性指定为查询字符串,也可以初始化属性。命令行初始化方法将检测它是否以ClickOnce的方式运行,这样在使用它时代码就不需要更改
  • 自动创建/?帮助:这包括考虑到控制台宽度的良好格式
  • 将命令行参数加载/保存到文件:如果您有多个大型、复杂的命令行参数集,并且希望多次运行,则这一点尤其有用
    • 我建议

      看这里:

      你可能会喜欢我的

      易于使用和扩展的命令行参数解析器。句柄:布尔、加号/减号、字符串、字符串列表、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);
              }
          }
      }
      
      编辑:这是我的项目,因此这个答案不应该被视为来自第三方的认可。也就是说,我确实在我编写的每一个基于命令行的程序中都使用它,它是开源的,我希望其他人可以使用它