2012-04-18 57 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 == "...")