2017-10-05 13 views
1

を実行しているから方法を阻止されているが、私は、静的ログヘルパークラスを持つWebサービスをしました、:私はの#define Xを持っている、[条件(「X」は)]

#define LOGGING 
namespace blah 
{ 
    static class Log{ 
    class LogFile { ... } 

    [Conditional("LOGGING")] 
    public static void CreateLogFile(string path) { ... } 
    } 
} 


//in some other class 
void SetupLogger(){ 
    DateTime dtStart = DateTime.UtcNow; 
    Log.CreateLogFile("c:\\temp\\log.log"); 
    DateTime dtEnd = DateTime.UtcNow; 
} 

私はCreateLogFileメソッドが呼び出されていないときに、私がデバッガをシングルステップで起動していない問題を見てきました。上記のSetupLogging()メソッドでは、デバッガはdtStartを定義する行からdtEndを定義する行にまっすぐジャンプします。私はVSは、少なくともログvarが定義されており、コード生成を駆動していると考えていますが、Conditional()属性の振る舞いがある私は

#if LOGGING 
    some code here 
#else 
    other code here 
#endif 

を入れているかのようにVisualStudioをはother code hereを灰色になり、これによって混乱しています反対..私はどこでも

任意の#undefのディレクティブを持っていない

は、この設定と露骨に何か問題ですか?ローカルIIS(エクスプレスではありません)でデバッグすると、静的クラスが正しく動作するように設定する必要がありますか(つまり、CreateLogFile()が呼び出せます)?

+0

「条件付き」とマークされたメソッドへの呼び出しは、コンパイル時にインクルードされるかどうかに関係なく、ビルドプロセスで何か問題があると思われます。 '#define'ステートメントを削除し、プロジェクト - >プロパティ - >ビルド - >条件付きコンパイルシンボルにLOGGINGシンボルを追加してみてください。 – BurnsBA

+1

LOGGINGシンボルが定義されていない別のアセンブリからCreateLogFile()メソッドを呼び出しているようです。 LOGGINGシンボルは、呼び出し側アセンブリで定義する必要があります。 –

+0

@IgorBendrupあなたは答えとしてそれを置くべきです - #私の他のクラス(別の名前空間内の別の.csファイル)に#LOGGINGを定義しました。そして今、それは期待通りに働いています、ありがとう..私は# Conditional属性に関して定義する - #defineのスコープが何であるかについて、あなたの答えにいくつかの言葉を言うことができれば、それは素晴らしいだろう - "同じ.csファイル"、 "同じ名前空間など –

答えて

1

CreateLogFile()メソッドをLOGGINGシンボルが定義されていない別のファイルから呼び出すようです。 LOGGINGシンボルis the file where it have been definedの範囲です。したがって、LOGGINGシンボルは、SetupLogger()メソッドを含むファイルに定義する必要があります。

もう1つの方法は、editing project propertiesによってアセンブリ全体のシンボルLOGGINGを定義することです。この場合、SetupLogger()メソッドを含むアセンブリのプロジェクトプロパティを設定する必要があります。

関連する問題