如何识别代码是在 ASP.Net 还是常规 AppDomain 下运行 [重复]

Posted

技术标签:

【中文标题】如何识别代码是在 ASP.Net 还是常规 AppDomain 下运行 [重复]【英文标题】:How to identify whether code runs under ASP.Net or regular AppDomain [duplicate] 【发布时间】:2014-12-22 16:18:21 【问题描述】:

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

这两种情况下代码的行为应该不同。

由于这是基础结构代码,我如何确定我在哪个类型的 AppDomain 下运行不依赖于 System.Web 命名空间 程序集?

例如:

public static string BasePath

    get
    
        var isAspNetAppDomain = ...
        return isAspNetAppDomain 
            ? Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin") 
            : AppDomain.CurrentDomain.BaseDirectory;
    

【问题讨论】:

检查 cmets 中的链接问题。 @Andrey 链接的答案需要依赖System.Web,这是我做不到的。我已编辑问题以反映此约束。 这个答案被批评为不可靠,这个更好,没有依赖关系:(AppDomain.CurrentDomain.GetData(".appDomain") != null) 无论如何,最好的方法是通过构造函数从***别传递此信息。喜欢new YourClass(Env.AspNet)。调用代码总是知道的。 【参考方案1】:

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

public static string GetBasePath(bool isAspNetAppDomain)

        return isAspNetAppDomain 
            ? Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin") 
            : AppDomain.CurrentDomain.BaseDirectory;

【讨论】:

问题是关于如何弄清楚isAspNetAppDomain是什么...

以上是关于如何识别代码是在 ASP.Net 还是常规 AppDomain 下运行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET中App_Data等文件夹的作用

asp.net网站管理工具上的用户无法登陆

将 ASP.Net Core Web App 项目发送给某人的最佳实践?

ASP.NET MVC 5 Azure App ZAP Scan 指示代理披露漏洞 - 我们如何防止这种情况发生?

ASP.NET CORE没有app.UseEndpoints()方法

如何在asp.net中使用my97时间控键