【问题标题】:Command-Line Parsing API from TestAPI library - Type-Safe Commands how toTestAPI 库中的命令行解析 API - 类型安全命令如何
【发布时间】:2010-06-16 05:10:21
【问题描述】:

图书馆在

http://testapi.codeplex.com/

摘自

的用法

http://blogs.msdn.com/ivo_manolov/archive/2008/12/17/9230331.aspx

第三种常用方法是从命令行参数形成强类型命令。这在命令行如下所示的情况下很常见:

some-exe  COMMAND  parameters-to-the-command

这种情况下的解析有点复杂:

  1. 为每个受支持的命令创建一个类,该类派生自 Command 抽象基类并实现预期的 Execute 方法。
  2. 将预期的命令与命令行参数一起传递给 CommandLineParser.ParseCommand - 该方法将返回一个可以是 Execute()-d 的强类型命令实例。

    // 示例 #3: // 解析以下命令行的示例: // Test.exe 运行 /runId=10 /verbose // 在这种特殊情况下,我们在命令行上有一个实际命令(“run”),我们想要有效地反序列化并执行它。

     public class   RunCommand : Command
     { 
     bool?  Verbose { get; set; } 
     int? RunId { get; set; }
     public override void Execute()
        {
       // Implement your "run" execution logic here.
        }
     }
      Command c = new RunCommand();
      CommandLineParser.ParseArguments(c, args);
      c.Execute();
    

=============================

如果我们在解析参数之前实例化特定的类,我不明白,命令行参数“run”是第一个参数有什么意义。我认为这个想法是基于命令行参数实例化和执行命令/类(“run”参数变成实例 RunCommand 类,“walk”变成 WalkCommand 类等等)。可以用最新版本完成吗?此外,我从 codeplex 下载的内容不能按照上述方式工作,并且不接受没有斜杠的第一个参数。因此,如果使用反射,我必须将命令名称作为通常的参数传递,然后执行多步骤 - 确定类名称,通过反射实例化,然后才通过 ParseArguments 解析其他参数。

【问题讨论】:

    标签: .net command-line-arguments


    【解决方案1】:

    麦克风, 我博客上的例子实际上是有缺陷的。我已经更正了它。

    本质上,您所做的是: 1. 解析第一个参数(命令名称)以找出需要实例化的命令 2. 实例化目标命令,然后将参数列表的其余部分传递给它。 3.执行命令

    即在您的 Main 中,您将执行以下操作...

    if (String.Compare(args[0], "run", StringComparison.InvariantCultureIgnoreCase) == 0)
    {
        Command c = new RunCommand();
        c.ParseArguments(args.Skip(1)); // or CommandLineParser.ParseArguments(c, args.Skip(1))
        c.Execute();
    }
    

    希望对您有所帮助。

    【讨论】:

    • 我想通了,但博客编辑值得接受它作为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 2012-06-26
    • 2013-11-18
    • 2012-05-09
    • 2013-01-13
    • 1970-01-01
    相关资源
    最近更新 更多