0

渡されたコマンドライン引数に応じて異なるメッセージボックス出力結果を与えるメソッドを作成しました。

現在、コマンドラインの引数文字列を変更するたびにデバッグを開始する必要があります。

デバッグセッション中にコマンドライン引数を変更する方法はありますか?

編集:私はいくつかのサンプルコードを追加しました

private static class MyParsers
    {

    public static List<string> args;

    static MyParsers()
    {
        args = Environment.GetCommandLineArgs().ToList();
    }

        public static List<string> ParseOptions()
        {
            return ParseOptions(true);
        }

        public static List<string> ParseOptions(bool caseSensitive)
        {
            return caseSensitive
                   ? args
                   : args.MyExtToLower();
        }

        public static bool OptionExists(string option)
        {
            return OptionExists(option, true);
        }

        public static bool OptionExists(string option, bool caseSensitive)
        {
            return caseSensitive
                       ? ParseOptions().Contains(option)
                       : ParseOptions().MyExtToLower().Contains(option);
        }

        public static bool OptionExists(string option, string delimiter)
        {
            return OptionExists(option, false, delimiter);
        }

        public static bool OptionExists(string option, bool caseSensitive, string delimiter)
        {
            var args = ParseOptions(caseSensitive);
            for (var i = 1; i < args.Count; i++)
            {
                if (args[i].Contains(option + delimiter)) return true;
            }
            return false;
        }
}

それから私は電話しますMessageBox.Show(MyParsers.OptionExists("/list","=").ToString());

コマンドライン引数が/list= blahの場合、 trueを返します。

コマンドライン引数が/listaryの場合、 falseを返します。

コマンドラインパラメータをすばやく変更するために、どのような方法を提案しますか?私が使用している上記のコードを考慮してください。

4

2 に答える 2

2

問題は、コマンドラインの引数を変更することではなく、別の引数ですでに実行されたコードを再実行することです。私が理解していることから、さまざまなコマンドライン引数を使用してプログラムをテストする必要があります。目標を達成するには、次の解決策を検討してください。

  • メソッドと同じようにPerformMain受け入れるメソッド()を定義するstring[] argsMain
  • Mainこのメソッドは、以前にメソッド内に保持されていたコードを実行する必要があります
  • newMainにはstring[]のリストが含まれている可能性があります。これらは、実行するテストケースです。
  • string []のリストをループし、ラッパーを実行して毎回異なる引数を渡します
  • PerformMainただし、連続実行が適切に機能するように、のコードラッパーは「ステートレス」である必要があることに注意してください。
  • このようにして、何百ものケースを簡単にテストできます

コードは次のようになります。

 static void Main(string[] args)
 {
     List<string[]> testCases = new List<string[]>();
     testCases.Add(new string[] { "/test", "xx" });
     testCases.Add(new string[] { "/other" });

     foreach (string[] testCase in testCases)
       Program.PerformMain(testCase);
 }

 static void PerformMain(string[] args)
 {
      // clear state of program
      // execute according to args
 }
于 2012-08-13T09:11:34.933 に答える
1

プロセスが開始されたコマンドラインは変更できません。ただし、アプリケーションの早い段階で、簡単にアクセスできる「設定」オブジェクトに引数をコピーして、代わりにそれを操作することができます。

編集:オブジェクトのプロパティを呼び出すたびにコマンドラインを解析する代わりに、プロパティを通常のプロパティに変更します。次にInitialise、起動時にコマンドラインを1回だけ解析できるように、メソッドを用意します(またはコンストラクターを使用します)。次に、イミディエイトウィンドウを使用して、プロパティの値を自由に変更できます。これは、プロパティが毎回コマンドラインを参照しているわけではないためです。

于 2012-08-13T09:12:29.657 に答える