我想知道什麼是從檢測的最佳方式,其中一個請求已發送(函數調用)檢測是否請求來自「網站項目」或「控制檯項目」
的意思是:我的項目去像這樣:
- 引擎
- Web項目(使用發動機)
- 測試項目的控制檯項目(使用發動機)
現在我想在運行測試項目時不會在函數中執行一些代碼。
我知道,我可以給一個布爾參數來檢測這一點,但我想知道是否有任何如果請求來自Web項目或不爲什麼檢測...
謝謝!
奧雷爾。
我想知道什麼是從檢測的最佳方式,其中一個請求已發送(函數調用)檢測是否請求來自「網站項目」或「控制檯項目」
的意思是:我的項目去像這樣:
現在我想在運行測試項目時不會在函數中執行一些代碼。
我知道,我可以給一個布爾參數來檢測這一點,但我想知道是否有任何如果請求來自Web項目或不爲什麼檢測...
謝謝!
奧雷爾。
如果被調用的代碼根據調用是來自Web項目還是控制檯項目而行爲不同,代碼不應該在共享庫中。它確實屬於相應的項目。
您可以使用StackFrame對象訪問堆棧跟蹤並查看以前調用您的方法的方法。通過使用該方法,您可以輕鬆找到相應的項目。從舊所以post:
StackTrace trace = new StackTrace();
int caller = 1;
StackFrame frame = trace.GetFrame(caller);
MethodBase callerMethod = frame.GetMethod();
雖然我要提醒你,就是你應該在調試的時候只爲了好玩/使用的東西。
您可以檢查HttpContext.Current
是否爲空。然而,賈斯汀尼斯納的建議仍然適用。
這在大多數情況下工作,但它會返回如果從Global.asax中的Application_Start方法或從新線程調用(也可能在少數其他情況下),則結果不正確。 – 2012-04-18 19:22:43
@Nuf很好打電話,沒想到那些。 – Matthew 2012-04-18 19:23:33
使用TESTPROJECT符號集和web項目編譯測試項目時不使用此符號。然後因爲ConditionalAttribute,SetIsFromTest()方法將僅在您的代碼從測試項目中調用時纔會執行(因此IsFromTest字段將設置爲true)。
static class Class1
{
static bool IsFromTest = false;
static Class1()
{
SetIsFromTest();
}
[Conditional("TESTPROJECT")]
public static void SetIsFromTest()
{
IsFromTest = true;
}
}
另一種選擇是,測試從共享庫調用組件的名稱。
if(System.Reflection.Assembly.GetCallingAssembly().FullName == "...")
這個鏈接似乎是相同的http://stackoverflow.com/questions/4394740/know-in-what-context-dll-is-running – NSGaga 2012-04-18 19:25:51