#ifコンパイラディレクティブのすべての例で、「DEBUG」を使用しています。デバッグモードでコンパイルされたときに実行したくないコードを除外するために、同じ方法で "RELEASE"を使用できますか?このブロックで囲むコードは大量のメールを送信しますが、テスト時に誤って送信したくないです。
いいえ、あなたが何らかの作業をしない限り、そうではありません。
ここで重要なのは、DEBUGが実際に何であるかであり、コンパイラがチェックできる定数の一種です。
プロジェクトのプロパティを確認すると、[ビルド]タブの下に3つの項目があります。
そのようなチェックボックスも、RELEASEという名前の事前定義された定数/シンボルもありません。
ただし、その名前を「条件付きコンパイルシンボル」というラベルの付いたテキストボックスに簡単に追加できますが、これらの設定は構成ごとであるため、プロジェクト構成をリリースモードに設定してください。
したがって、基本的に、テキストボックスに追加しない限り、#if RELEASE
はどのような構成でもコードを生成しません。
RELEASE
は定義されていませんが、使用できます
#if (!DEBUG)
...
#endif
いや。
デバッグ構成では、DEBUG
定義済み定数(Visual Studioによって自動的に定義されます)がありますが、リリースモード用に定義された定数はありません。ビルド中のプロジェクト設定を確認してください。
Project-> Buildで[Define DEBUG constant]を選択することは、すべてのファイルの先頭に#define DEBUGを含めるようなものです。
リリース構成のRELEASE定数を定義する場合は、次の場所に移動します。
VSインストール(VS 2008)では、#if RELEASE
が機能しません。ただし、単に#if !DEBUG
を使用できます
例:
#if !DEBUG
SendTediousEmail()
#endif
私はそれを見たことがありません...しかし、私は見たことがあります:
#if (DEBUG == FALSE)
そして
#if (!DEBUG)
それはあなたのために働くのですか?
この目的で#if(!DEBUG)
を使用できます。
「Pop Catalin」が正解です。ビルドのタイプに基づいて定義を制御すると、柔軟性が大幅に向上します。たとえば、「DEBUG」、「DEMO」、および「RELEASE」構成をすべて同じソリューションに含めることができます。これにより、2つの異なるソリューションでプログラミングを複製する必要がなくなります。
そのため、RELEASE条件付きコンパイルシンボルが定義されている場合、#if RELEASE
または#if (RELEASE)
は#if DEBUG
と同じように機能します。
「Pop Catalin」投稿から以下を取得します。リリース構成にリリース定数を定義する場合は、次の場所に移動します。*プロジェクトプロパティ->ビルド * でリリースモードを選択*条件付きコンパイルシンボル textbox enter:RELEASE
これは古い質問ですが、TESTやUATなど、DEBUGやRELEASE以外の独自の構成を作成できることは言及する価値があるかもしれません。
次に、プロジェクトのプロパティページの[ビルド]タブで、[条件付きコンパイルシンボル]をTEST(たとえば)に設定すると、次のような構造を使用できます。
#if (DEBUG || TEST )
//Code that will not be executed in RELEASE or UAT
#endif
このコンストラクトは、必要に応じて異なるクライアント、またはたとえばWebメソッド全体など、特定の理由で使用できます。一部のコマンドが特定のハードウェアで問題を引き起こした過去にもこれを使用しているため、ハードウェアXに展開されたときにアプリの構成があります。
独自の条件付きコンパイル時シンボル(好きな名前)を作成できます。プロジェクトのプロパティボックスにある「プロジェクトビルドダイアログ」に進み、メニューオプション:プロジェクト-> [プロジェクト名]のプロパティ...
「C#コードファイルの上部」で定義することもできます。のような:
#define RELEASE
// or
#undef RELEASE
#ifステートメントでシンボルを使用できます。
#if RELEASE
// code ...
#Elif …
// code ...
#endif
// or
#if !RELEASE
// code ...
#endif