C# 检测请求是否来自“网站项目”或“控制台项目”

C# 检测请求是否来自“网站项目”或“控制台项目”,c#,web,console-application,C#,Web,Console Application,我想知道什么是检测函数调用从何处发送请求的最佳方法 意思是:我的项目是这样的: 发动机 Web项目使用引擎 测试项目控制台项目使用引擎 现在,我希望在运行测试项目时,函数中不会执行某些代码 我知道我可以发送一个布尔参数来检测这一点,但我想知道是否有任何原因来检测请求是否来自web项目 谢谢 Orel.如果所调用的代码根据调用是来自web项目还是控制台项目而表现不同,则代码不应位于共享库中。它确实属于相应的项目。您可以使用该对象访问堆栈跟踪,并查看前面调用您的方法是什么。通过使用该方法,您可以轻松

我想知道什么是检测函数调用从何处发送请求的最佳方法

意思是:我的项目是这样的:

发动机 Web项目使用引擎 测试项目控制台项目使用引擎 现在,我希望在运行测试项目时,函数中不会执行某些代码

我知道我可以发送一个布尔参数来检测这一点,但我想知道是否有任何原因来检测请求是否来自web项目

谢谢


Orel.

如果所调用的代码根据调用是来自web项目还是控制台项目而表现不同,则代码不应位于共享库中。它确实属于相应的项目。

您可以使用该对象访问堆栈跟踪,并查看前面调用您的方法是什么。通过使用该方法,您可以轻松找到相应的项目。从较年长的so:


尽管我应该警告您,这是您只应该在调试时/为了好玩而使用的东西。

您可以检查HttpContext.Current是否为null@然而,贾斯汀尼斯纳的建议仍然适用。

使用TESTPROJECT符号集编译测试项目,而不使用此符号编译web项目。然后,由于,只有当您的代码是从测试项目中调用时,才会执行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 == "...")

这在大多数情况下都能工作,但如果从global.asax中的应用程序启动方法或从新线程调用,则会返回不正确的结果,可能在其他少数情况下也是如此。此链接似乎是相同的
if(System.Reflection.Assembly.GetCallingAssembly().FullName == "...")