我已經有一個靜態的登錄助手類的網絡服務,看起來像這樣:雖然我的#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
方法的問題。在上述方法中,調試器從定義dtStart的行直接跳轉到定義dtEnd的行。我被這個迷惑,因爲如果我把
#if LOGGING
some code here
#else
other code here
#endif
VisualStudio中會變灰other code here
所以VS至少相信,測井變種被定義和駕駛代碼生成,但Conditional()
屬性的行爲是相反..
我沒有任何#undef指令隨時隨地
是什麼公然錯與此設置?在本地IIS(非快速)中調試時,應該像這樣安排的靜態類能夠正常工作(即可調用CreateLogFile()
)?
調用標有'Conditional'的方法會被包含在編譯時或不在編譯時,這似乎表明構建過程中有些不正確。嘗試刪除你的'#define'語句並添加「LOGGING」符號到項目 - >屬性 - >編譯 - >條件編譯符號 – BurnsBA
看起來好像是從另一個程序集中調用CreateLogFile()方法,它沒有定義LOGGING符號。 LOGGING符號應該在調用程序集中定義。 –
@IgorBendrup你應該把它作爲一個答案 - 我#定義LOGGING在我的其他類(在另一個.cs文件中,在另一個名稱空間中)也現在它按預期工作,謝謝..顯然,我不知道#定義關於條件屬性 - 如果你可以在你的答案中說幾句關於#define的範圍的東西,它會很棒 - 我不確定它是否是「相同的.cs文件」,「相同的命名空間「等 –