2011-10-05 8 views
6

Visual Studio 2010でビルドしているC#アプリケーションがあります。アプリケーションのルーチンタスクの一部を手助けするために、アプリケーションをコンパイルするといくつかの値を設定したかったのですデバッグモードです。当然のことながら、私はプリプロセッサディレクティブが良い考えです。私の問題は、私はそれらを使う方法をあまり理解していないということです。この時点で、私はこのようなコードのブロックを持っている:C#でVisual Studio 2010でプリプロセッサディレクティブを使用する

#define DEBUG 

... // Other code in my app 

#if DEBUG 
    myVariable = debugValue; 
#endif 

私の問題は、私はリリースモードで私のアプリをコンパイルするとき、myVariable変数がまだdebugValueに設定されます、です。私のプリプロセッサ変数を正しく定義していないか、コンパイラを正しく設定していないようです。私がデバッグモードでアプリケーションをコンパイルするときにmyVariableがdebugValueに設定されるように、私が何をする必要があるのか​​誰にでも私に説明することはできますか?

ありがとうございました!

答えて

11

#define DEBUGを使用してデバッグシンボルを指定している場合は、明示的に定義しているため、リリースモードに切り替えてもシンボルが提供されます。

コードファイルの#define DEBUG行を削除してみてください。デフォルトでは、VSはデバッグモードではDEBUGTRACE、リリースモードではTRACEを定義しているため、明示的に定義する必要はありません。

+0

+1私はパンチに私を打つ:) –

5

DEBUG定数は実際にプロジェクトプロパティで定義されています。プロジェクトプロパティ - >ビルドタブ - >定義DEBUG定数に移動します。

明示的に定数を宣言することで、VSで宣言されたものを上書きします。あなたは、構成のデバッグとリリースは、シンボルを定義どのように見ることができますテキストエディタを使用して.csprojファイルを開く場合は、単に...カイルとスティーブの答えに

を少し追加する

4

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> 
    ... 
    <DefineConstants>DEBUG;TRACE</DefineConstants> 
    ... 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> 
    ... 
    <DefineConstants>TRACE</DefineConstants> 
    ... 
    </PropertyGroup> 

アクティブconfigが

<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration> 

で設定したが、カイルはすでに基本的にあなたのコードを述べたように、すべての構成に追加されます。

9

気づいていない場合は、"Conditional" attributeをチェックしてください。これはあなたではなく、プリプロセッサディレクティブをインライン化以外の方法を飾ることができます:

class SomeClass 
{ 
    public void ProductionOperation() 
    { 
     //Doin' production stuff 
     Log(someProductionVariable); 
    } 

    [Conditional("DEBUG")] 
    public static void Log(string message) 
    { 
     //Write to a file 
    } 
} 

デバッグモードでコンパイルしている場合は、ログの方法は、ファイルに書き込みます。リリースモードでコンパイルしている場合、条件付きメソッドはノーオペレーションになります。ここで覚えておかなければならないのは、プリプロセッサでプリエンプトする場合とは異なり、条件付きコードがアセンブリに組み込むことだけです。これは実行時の区別です。しかし、あなたが気にしない限り、私はこれがコードをきれいに保つことが分かっています。

(これを行うつもりならば、コードのどこにでもDEBUG変数を#defineまたは#defineすることは望ましくありません)。