.NET TIPS

独自のビルド構成により実行コードを切り替えるには?

デジタルアドバンテージ 一色 政彦
2005/01/21

 「TIPS:テスト用コードをデバッグ時にのみ実行するには?」では、テスト用のコードをデバッグ版にのみ含めて、デバッグ時にしか実行されないようにする方法を紹介した。しかしこのようなビルド構成ごとの実行コードの切り替えは、前掲のTIPSのようにデバッグ版のビルド構成だけではなく、独自に作成したビルド構成ごとに行うこともできる。

 なお、独自のビルド構成の作成方法については、「TIPS:VS.NETでデバッグ版/リリース版以外のビルド構成を追加するには?」で紹介した。

 そこで、本稿ではビルド構成ごとに実行コードを切り替える方法について紹介する。

「独自のビルド構成」に対する「独自の条件付きコンパイル定数」の設定

 本稿のサンプル・コードの前提条件として、「TIPS:VS.NETでデバッグ版/リリース版以外のビルド構成を追加するには?」の手順で「Demo Debug」という独自のビルド構成を事前に追加しているものとする。

 このビルド構成「Demo Debug」に、まず独自の条件付きコンパイル定数(以下の例では「DEMO」)を追加する。これには、Visual Studio .NETでプロジェクトのプロパティを開き、次の画面のように設定する。

条件付きコンパイル定数の設定(Visual C# .NET)
Visual C# .NETで、プロジェクトのプロパティで条件付きコンパイル定数として「DEMO」を追加する。
  [ソリューション エクスプローラ]のプロジェクトを右クリックしてコンテキスト・メニューを表示し、そのメニューから[プロパティ]を選択することで、[<プロジェクトの> プロパティ ページ]ダイアログが表示される。
  [<プロジェクトの> プロパティ ページ]ダイアログでは、左上の[構成]のコンボボックスからビルド構成(この例では「Demo Debug」)を選択する。
  左のツリーから[構成プロパティ]−[ビルド]を選択し、右のプロパティ設定の[条件付きコンパイル定数]の欄の右端に「;DEMO」(セミコロン「;」は、定数を分けるための区切り文字)を追加指定する。これにより、「Demo Debug」のビルド構成にのみ、この「DEMO」という条件付きコンパイル定数が指定されることになり、これにより「Demo Debug」とそれ以外で条件分岐できるようになる。
 
条件付きコンパイル定数の設定(Visual Basic .NET)
Visual Basic .NETで、プロジェクトのプロパティで条件付きコンパイル定数として「DEMO」を追加する。
  [ソリューション エクスプローラ]のプロジェクトを右クリックしてコンテキスト・メニューを表示し、そのメニューから[プロパティ]を選択することで、[<プロジェクトの> プロパティ ページ]ダイアログが表示される。
  [<プロジェクトの> プロパティ ページ]ダイアログでは、左上の[構成]のコンボボックスからビルド構成(この例では「Demo Debug」)を選択する。
  左のツリーから[構成プロパティ]−[ビルド]を選択し、右のプロパティ設定の[条件付きコンパイル定数]の欄に「DEMO=True」(複数の定数を追加する場合は、カンマ「,」で区切る)を追加指定する。これにより、「Demo Debug」のビルド構成にのみ、この「DEMO」という条件付きコンパイル定数が指定されることになり、これにより「Demo Debug」とそれ以外で条件分岐できるようになる。

 これで準備は完了だ。以上の設定では、「Demo Debug」のビルド構成を選択した場合に、コンパイル定数としてDEBUG、TRACE、DEMOの3つが定義されることになる。

 後は、「TIPS:テスト用コードをデバッグ時にのみ実行するには?」と同じ手順で、Conditional属性(以降、条件属性)、もしくは条件付きコンパイル・ディレクティブ(以降、条件ディレクティブ)のいずれかを使ってコードを記述すればよい(このTIPSの「DEBUG」というコンパイル定数を「DEMO」に置き換えるだけでよい)。

 ここでは、条件ディレクティブを使った場合のサンプル・プログラムを示しておくことにしよう。

条件付きコンパイル・ディレクティブ(#ifディレクティブ)を使った方法

 条件ディレクティブを使う方法では、#if <条件(この例では「DEMO」)>ディレクティブ〜#endifディレクティブ(C#の場合)/#If <条件(この例では「DEMO」)> Then〜#End If(VB.NETの場合)で、「Demo Debug」のビルド構成のときにのみ実行したいコードを囲えばよい。具体的には次のようなコードになる。

using System;
using System.Diagnostics;

namespace ConsoleApplication1
{
  class Class1
  {
    [STAThread]
    static void Main(string[] args)
    {
#if DEMO

  #if DEBUG
      Console.WriteLine("デモ用デバッグ版");
  #else
      Console.WriteLine("デモ用リリース版");
  #endif

#else


  #if DEBUG
      Console.WriteLine("デバッグ版");
  #else
      Console.WriteLine("リリース版");
  #endif

#endif

    }

  }

}
条件ディレクティブ(#ifディレクティブ)によりデバッグ時にのみ実行されるサンプル・プログラム(C#)
太字の部分のコードのようにして、#if <条件(この例では「DEMO」や「DEBUG」)>ディレクティブ〜#endifディレクティブで特定の条件下でのみ実行したいコードを囲う。
 
Module Module1

  Sub Main()
#If DEMO Then

  #If DEBUG Then
    Console.WriteLine("デモ用デバッグ版")
  #Else
    Console.WriteLine("デモ用リリース版")
  #End If

#Else

  #If DEBUG Then
    Console.WriteLine("デバッグ版")
  #Else
    Console.WriteLine("リリース版")
  #End If

#End If
  End Sub

End Module
条件ディレクティブ(#Ifディレクティブ)によりデバッグ時にのみ実行されるサンプル・プログラム(VB.NET)
太字の部分のコードのようにして、#If <条件(この例では「DEMO」や「DEBUG」)> Thenディレクティブ〜#End Ifディレクティブで特定の条件下でのみ実行したいコードを囲う。

 上記コードでは、「DEMO」と「DEBUG」という2つの条件付きコンパイル定数を入れ子に使って複雑に条件分岐するようにしている。最初にコードを「DEMO」とそうでないもので条件分岐し、次に条件分岐したそれぞれのコードをさらに「DEBUG」とそうでないもので条件分岐している。このように複数の条件付きコンパイル定数を組み合わせて使うこともできる。End of Article

カテゴリ:C# 処理対象:デバッグ
カテゴリ:Visual Basic .NET 処理対象:デバッグ
使用ライブラリ:ConditionalAttribute属性(System.Diagnostics名前空間)
使用キーワード:#ifディレクティブ
使用キーワード:#Ifディレクティブ
関連TIPS:テスト用コードをデバッグ時にのみ実行するには?
関連TIPS:VS.NETでデバッグ版/リリース版以外のビルド構成を追加するには?
 
この記事と関連性の高い別の.NET TIPS
テスト用コードをデバッグ時にのみ実行するには?
VS.NETでデバッグ版/リリース版以外のビルド構成を追加するには?
VB開発者設定で「Debug」や「Release」などのソリューション構成を有効にするには?
Visual Studioでコンソール・アプリケーションのデバッグ実行時にコマンド・プロンプトを閉じないようにするには?
実行中のアプリケーションにデバッガが接続されているかを判定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

@IT Special

- PR -

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH