我想知道什么是从检测的最佳方式,其中一个请求已发送(函数调用)检测是否请求来自“网站项目”或“控制台项目”
的意思是:我的项目去像这样:
- 引擎
- 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