#if RELEASEは、#if DEBUGがC#で動作するように機能しますか?


277

#ifコンパイラ指令のすべての例で、「DEBUG」を使用しています。「RELEASE」を同じ方法で使用して、デバッグモードでコンパイルしたときに実行したくないコードを除外できますか?このブロックで囲んだコードは大量のメールを送信し、テスト中に誤って送信したくありません。


3
#if !DEBUGと同じ機能を果たします#if RELEASE。また、#if DEBUGその後、#elseその後#endifのモードで実行するために別のコードがあるかどう。
Nat

回答:


275

いいえ、あなたはいくつかの仕事をしない限り、それはしません。

ここでの重要な部分はデバッグが実際に何であるかであり、それはコンパイラがチェックすることができる定義された定数の一種です。

プロジェクトのプロパティを確認すると、[ビルド]タブで3つのことがわかります。

  • 「条件付きコンパイルシンボル」というラベルの付いたテキストボックス
  • 「DEBUG定数を定義する」というラベルの付いたチェックボックス
  • 「Define TRACE constant」というラベルの付いたチェックボックス

そのようなチェックボックスや、RELEASEという名前の定義済みの定数/シンボルはありません。

ただし、条件付きコンパイルシンボルというラベルの付いたテキストボックスにその名前を簡単に追加できますが、これらの設定は構成ごとに行われるため、変更する前にプロジェクト構成を必ずリリースモードに設定してください。

したがって、基本的には、それをテキストボックスに追加しない限り、#if RELEASEどのような構成でもコードは生成されません。


391

RELEASE 定義されていませんが、使用できます

#if (!DEBUG)
  ...
#endif

2
そうではありませんが、もちろん、NOT演算子をそのように使用できます。私が答えを書いたとき、それを考えなかった。
Lasse V. Karlsen、

4
それは可能ですが、あなたのソリューションを使用する方がより明確で「より正確」です。
ダニエルシャファー、

1
特に、RELEASEとDEBUG以外にも多くの構成を使用できるため、一部のプロジェクトでは、DEBUG、RELEASE、DEPLOYまたはDEV(DEBUG)、TEST、およびPROD(RELEASE)
Adam Nofsinger

上記のコメントで混乱した他の人にとって、未編集の回答RELEASEは定義されているのか疑問に思いました。
ダン

41

いいえ。

デバッグ構成では、DEBUG(Visual Studioによって自動的に定義された)定義された定数がありますが、リリースモード用に定義された定数はありません。ビルド中のプロジェクト設定を確認してください。

プロジェクト->ビルドの [Define DEBUG constant]を選択することは、すべてのファイルの先頭に#define DEBUGを含めることに似ています。

リリース構成のRELEASE定数を定義する場合は、次の場所に移動します。

  • プロジェクトプロパティ->ビルド
  • リリースモードを選択
  • 条件付きコンパイルシンボル入力テキストボックス:RELEASE

1
リリース構成にRELEASE定数を、テスト構成にTESTING定数を定義したので、これは非常に便利です。定義するために非常に有用なのは、必要とHTTPSのみのリリースのために#if (RELEASE) [RequireHttps] #endif
tekiegirl

26

私のVSインストール(VS 2008)#if RELEASEでは機能しません。しかし、あなたはただ使うことができました#if !DEBUG

例:

#if !DEBUG
SendTediousEmail()
#endif

10

私はこれまでに見たことがありません...

#if (DEBUG == FALSE)

そして

#if (!DEBUG)

ええ、そうですか?


C#では、プリプロセッサシンボルに値はありません。それらは単に「定義済み」または「未定義」です。したがって!、2番目の例のように、オペレーターのみが機能します。
Jonathon Reinhart

1
MSDNによると、==などの演算子使用して、trueまたはfalseをテストできます。msdn.microsoft.com/en-us/library/4y6tbswk.aspx
jason_ruz


4

「Pop Catalin」は正解です。ビルドのタイプに基づいて定義を制御することで、柔軟性が大幅に向上します。たとえば、 "DEBUG"、 "DEMO"、および "RELEASE"構成をすべて同じソリューションに含めることができます。これにより、2つの異なるソリューションを使用してプログラミングを重複して行う必要がなくなります。

したがって、はい、#if RELEASEまたはRELEASE条件付きコンパイルシンボルが定義さ#if (RELEASE)れている#if DEBUG場合と同じように機能します。

以下は、「ポップカタリン」ポストから取られている:あなたはにリリース構成を行くためのRELEASE定数定義する場合:*プロジェクトのプロパティを- >ビルド *選択してリリースモード*で条件付きコンパイルシンボルを入力してくださいテキストボックス:RELEASEを


2

私はこれが古い質問であることを知っていますが、TESTやUATなど、DEBUGおよびRELEASEの外で独自の構成を作成できることは言及に値するかもしれません。

次に、プロジェクトプロパティページの[ビルド]タブで、[条件付きコンパイルシンボル]をTESTに設定すると(たとえば)、次のような構成を使用できます。

#if (DEBUG || TEST )
    //Code that will not be executed in RELEASE or UAT
#endif

このコンストラクトは、必要に応じてさまざまなクライアントや、たとえばWebメソッド全体などの特定の理由で使用できます。一部のコマンドが特定のハードウェアで問題を引き起こした過去にもこれを使用したため、ハードウェアXにデプロイしたときにアプリの構成があります。


0

独自の条件付きコンパイル時シンボル(任意の名前)を作成できます。プロジェクトプロパティボックスのメニューオプションにある[プロジェクトのビルド]ダイアログに移動します。プロジェクト-> [プロジェクト名]プロパティ...

「C#コードファイルの先頭」で定義することもできます。お気に入り:

#define RELEASE
// or
#undef RELEASE

このシンボルは#ifステートメントで使用できます。

#if RELEASE
// code ...
#elif 
// code ...
#endif

// or

#if !RELEASE
// code ...
#endif

-8

なぜか

#if RELEASE
#undef DEBUG
#endif

3
リリースモードでVisual Studioによって定義されたRELEASEという名前の定数はありません。
ポップカタリン

1
/d:RELEASEも動作します。これをリリース構成(プロジェクトプロパティのビルドタブ)の条件付きコンパイルシンボルに追加することもできます。
SliverNinja-MSFT 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.