来自TestAPI库的命令行解析API - 类型安全命令如何

时间:2010-03-31 02:12:38

标签: .net command-line-arguments

图书馆

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 - 该方法将返回一个强类型的Command实例,该实例可以是Execute() - d。

    //示例#3://用于解析以下命令行的示例:  // Test.exe运行/ runId = 10 /详细  //在这种特殊情况下,我们在命令行(“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();
    
  3. ============================

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

1 个答案:

答案 0 :(得分:0)

MicMit, 我博客上的例子实际上是有缺陷的。我已经纠正过了。

从本质上讲,你所做的是: 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();
}

希望有所帮助。