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.NetAppDomain
下运行
对于这两种情况,代码的行为应该有所不同
由于这是基础结构代码,我如何在不依赖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
。。。