0

図書館

http://testapi.codeplex.com/

からの使用法の抜粋

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

3 番目の一般的な方法は、コマンド ライン パラメーターから厳密に型指定されたコマンドを作成することです。これは、コマンドラインが次のような場合によく見られます。

some-exe  COMMAND  parameters-to-the-command

この場合の解析はもう少し複雑です。

  1. Command 抽象基本クラスから派生し、予期される Execute メソッドを実装する、サポートされているすべてのコマンドに対して 1 つのクラスを作成します。
  2. CommandLineParser.ParseCommand にコマンド ライン引数と共に予期されるコマンドを渡します。このメソッドは、Execute() で指定できる厳密に型指定された Command インスタンスを返します。

    // 例 #3: // 次のコマンド ラインを解析するサンプル: // Test.exe run /runId=10 /verbose // この特定のケースでは、コマンド ラインに実際のコマンド (「実行」) があります。 、これを効果的にデシリアライズして実行したい。

     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」パラメーターはインスタンスRunCommandクラスになり、「walk」はWalkCommandクラスになります)。最新バージョンでできますか?さらに、codeplex からダウンロードしたものは、上記の方法では機能せず、スラッシュのない最初のパラメーターを受け入れません。したがって、リフレクションを使用する場合は、通常のパラメーターとしてコマンド名を渡してから、クラス名を決定し、リフレクションを介してインスタンス化してから、ParseArguments を介して他の引数を解析する必要があります。

4

1 に答える 1

0

MicMit、私のブログの例には実際に欠陥がありました。それ以来、私はそれを修正しました。

基本的には、次のようにします。1.最初の引数(コマンド名)を解析して、インスタンス化する必要のあるコマンドを特定します。2.ターゲットコマンドをインスタンス化し、残りの引数リストをそれに渡します。3.コマンドを実行します

つまり、メインでは、次のようなことをします...

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();
}

お役に立てば幸いです。

于 2010-06-15T21:10:21.440 に答える