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);
}
}
}
编辑:这是我的项目,因此这个答案不应该被视为来自第三方的认可。也就是说,我确实在我编写的每一个基于命令行的程序中都使用它,它是开源的,我希望其他人可以使用它