C# 如何确定代码是在ASP.Net还是常规AppDomain下运行

C# 如何确定代码是在ASP.Net还是常规AppDomain下运行,c#,asp.net,.net,appdomain,C#,Asp.net,.net,Appdomain,我有一些基础结构代码,可以在常规的AppDomain下运行,在其他一些情况下可以在ASP.NetAppDomain下运行 对于这两种情况,代码的行为应该有所不同 由于这是基础结构代码,我如何在不依赖System.Webnamespace程序集的情况下识别运行的AppDomain是哪种类型的 例如: public static string BasePath { get { var isAspNetAppDomain = ... return isA

我有一些基础结构代码,可以在常规的
AppDomain
下运行,在其他一些情况下可以在ASP.Net
AppDomain
下运行

对于这两种情况,代码的行为应该有所不同

由于这是基础结构代码,我如何在不依赖
System.Web
namespace程序集的情况下识别运行的
AppDomain
是哪种类型的

例如:

public static string BasePath
{
    get
    {
        var isAspNetAppDomain = ...
        return isAspNetAppDomain 
            ? Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin") 
            : AppDomain.CurrentDomain.BaseDirectory;
    }
}

总的来说,这类事情是一个糟糕的设计。如果这两种情况下的行为不同,那么实际上可能是两个单独的方法,或者是一个带有bool参数的方法:

public static string GetBasePath(bool isAspNetAppDomain)
{
        return isAspNetAppDomain 
            ? Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin") 
            : AppDomain.CurrentDomain.BaseDirectory;
}

还要检查注释中的链接问题。@Andrey链接的答案需要依赖于
System.Web
,这是我做不到的。我对问题进行了编辑以反映此约束。该答案因不可靠而受到批评,该答案更好,并且没有依赖项:
(AppDomain.CurrentDomain.GetData(“.AppDomain”)!=null)
无论如何,最好的方法是通过最高级别的构造函数传递此信息。比如
newyourclass(Env.AspNet)
。调用代码总是知道的。问题是如何找出什么是
isAspNetAppDomain
。。。