金曜日, 6月 02, 2006

[C#] [Conditional] を指定するとその部分がビルドされない

デバック実行して、動きを見てみたんですがね。
その分岐点にブレークポイントを貼ることすらできやしねぇ。

ビルド構成は、「B-Debug」で実行。
#ビルド構成は、全部で6種類
「A-Debug」「A-Releace」
「B-Debug」「B-Releace」
「Debug」「Releace」
-------------------------------------------------
using System;
using System.Diagnostics;

namespace ConsoleApplication1
{
 class Class1
 {
  [STAThread]
  static void Main(string[] args)
  {
   Console.WriteLine("Mainメソッド実行");
   Class1.Test("Bの時だけ実行したい");//この行にブレークポイントを張って実行すると下にずれる
  }

  [Conditional("B-Debug"),Conditional("B-Releace")]
  static private void Test(string message)
  {
   Console.WriteLine(message);
  }
 }
}
-------------------------------------------------
Testメソッドに入らない。
Class1.Testの行にブレークポイントを張ってみたが、
それすら後ろにずれてしまう。

@IT:.NET TIPS テスト用コードをデバッグ時にのみ実行するには? - C# VB.NET
に記載してあった、条件付コンパイル定数の指定を見てみると、
"B-Debug","B-Releace"がなかった。
追加して、再度実行してみる。
#あったのは以下の通り。
#「DEBUG」「NUNIT」「PATTERN_B」「RELEACE」
##ビルド構成につけられている名前が、
##そのまま条件付コンパイル定数に使えると思ったら甘いらしい。
##どこでビルド構成と、条件付コンパイル定数を関連付けているのか謎。

実行したが、やっぱりTestのメソッドに入らない。

Conditionalを"DEBUG"、ビルド構成を「Debug」に変更してやってみた。
(変更箇所は//●)
-------------------------------------------------
using System;
using System.Diagnostics;

namespace ConsoleApplication1
{
 class Class1
 {
  [STAThread]
  static void Main(string[] args)
  {
   Console.WriteLine("Mainメソッド実行");
   Class1.Test("Bの時だけ実行したい");
  }

  [Conditional("DEBUG"),Conditional("B-Releace")]//●
  static private void Test(string message)
  {
   Console.WriteLine(message);
  }
 }
}
-------------------------------------------------
きちんと通りました。

ためしに、Conditionalを"DEBUG"を"PATTERN_B"に変更して、
ビルド構成を「B-Debug」で実行。(変更箇所は//●)
-------------------------------------------------
using System;
using System.Diagnostics;

namespace ConsoleApplication1
{
 class Class1
 {
  [STAThread]
  static void Main(string[] args)
  {
   Console.WriteLine("Mainメソッド実行");
   Class1.Test("Bの時だけ実行したい");
  }

  [Conditional("PATTERN_B")]//●
  static private void Test(string message)
  {
   Console.WriteLine(message);
  }
 }
}
-------------------------------------------------
きちんと中に入ってくれました。
他人が作ったのを改造してるから知らないことが多すぎる。
どうやって、ビルド構成と、条件付コンパイル定数を関連付けるかが次の課題。

0 件のコメント: