我正在寻找命令行参数解析器,例如来自http://www.sellsbrothers.com/tools/Genghis/的“命令行解析器”。
我正在寻找的功能:
P.S: “命令行解析器”非常好,我真的很喜欢它的设计,但没有文档,没有新的更新,我无法弄清楚如何检查所需的参数。
答案 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参数!
功能(来自网站)......
答案 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);
}
}
}
编辑:这是我的项目,因此这个答案不应被视为第三方的认可。也就是说,我确实将它用于我编写的每个基于命令行的程序,它是开源的,我希望其他人可以从中受益。