2012-04-18 59 views
0

我想知道什麼是從檢測的最佳方式,其中一個請求已發送(函數調用)檢測是否請求來自「網站項目」或「控制檯項目」

的意思是:我的項目去像這樣:

  • 引擎
  • Web項目(使用發動機)
  • 測試項目的控制檯項目(使用發動機)

現在我想在運行測試項目時不會在函數中執行一些代碼。

我知道,我可以給一個布爾參數來檢測這一點,但我想知道是否有任何如果請求來自Web項目或不爲什麼檢測...

謝謝!

奧雷爾。

+0

這個鏈接似乎是相同的http://stackoverflow.com/questions/4394740/know-in-what-c​​ontext-dll-is-running – NSGaga 2012-04-18 19:25:51

回答

3

如果被調用的代碼根據調用是來自Web項目還是控制檯項目而行爲不同,代碼不應該在共享庫中。它確實屬於相應的項目。

0

您可以使用StackFrame對象訪問堆棧跟蹤並查看以前調用您的方法的方法。通過使用該方法,您可以輕鬆找到相應的項目。從舊所以post

StackTrace trace = new StackTrace(); 
int caller = 1; 
StackFrame frame = trace.GetFrame(caller); 
MethodBase callerMethod = frame.GetMethod(); 

雖然我要提醒你,就是你應該在調試的時候只爲了好玩/使用的東西。

2

您可以檢查HttpContext.Current是否爲空。然而,賈斯汀尼斯納的建議仍然適用。

+0

這在大多數情況下工作,但它會返回如果從Global.asax中的Application_Start方法或從新線程調用(也可能在少數其他情況下),則結果不正確。 – 2012-04-18 19:22:43

+0

@Nuf很好打電話,沒想到那些。 – Matthew 2012-04-18 19:23:33

2

使用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 == "...")