を実行しているから方法を阻止されているが、私は、静的ログヘルパークラスを持つ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()
が呼び出せます)?
「条件付き」とマークされたメソッドへの呼び出しは、コンパイル時にインクルードされるかどうかに関係なく、ビルドプロセスで何か問題があると思われます。 '#define'ステートメントを削除し、プロジェクト - >プロパティ - >ビルド - >条件付きコンパイルシンボルにLOGGINGシンボルを追加してみてください。 – BurnsBA
LOGGINGシンボルが定義されていない別のアセンブリからCreateLogFile()メソッドを呼び出しているようです。 LOGGINGシンボルは、呼び出し側アセンブリで定義する必要があります。 –
@IgorBendrupあなたは答えとしてそれを置くべきです - #私の他のクラス(別の名前空間内の別の.csファイル)に#LOGGINGを定義しました。そして今、それは期待通りに働いています、ありがとう..私は# Conditional属性に関して定義する - #defineのスコープが何であるかについて、あなたの答えにいくつかの言葉を言うことができれば、それは素晴らしいだろう - "同じ.csファイル"、 "同じ名前空間など –