gpt4 book ai didi

c# - 在没有 Global.asax 的情况下,如何在 ASP.NET 中获取 Web 应用程序程序集?

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:32 24 4
gpt4 key购买 nike

我想从该应用程序引用并在同一 AppDomain 中执行的任何代码中动态获取当前正在执行的 Web 应用程序的程序集。

我想要这个问题的确切内容:Get web application assembly name, regardless of current executing assembly

但是,该问题中的所有回复都使用 Global.asax 文件来获取 Web 应用程序集。如果应用程序没有 global.asax 文件,那将不起作用,因为在这种情况下,返回的类型是 HttpApplication,它位于 System.Web 程序集中.

我考虑过的一种方法是通过某种方式过滤当前 AppDomain 中的程序集,但我不知道这可能是什么。 Web 应用程序的汇编与另一个普通的 DLL 之间有什么区别吗?我知道 Visual Studio 中的项目有一个 GUID 来表示项目类型(ASP.NET Web 应用程序、类库、MVC 应用程序等)。此信息是否以某种方式存在于已编译的程序集中?

另一种方法可能是使用 System.Web.Hosting 命名空间中的 ApplicationHost,但它只有静态数据,与程序集无关。

第三种方法是在 Web 应用程序项目中包含一个类型并使用该类型,但为此我需要获取 Web 程序集名称的代码需要对该类型的引用(这将是一个循环引用) .

有什么想法吗?

最佳答案

作为一个非常丑陋的 hack,您可以在应用程序中找到一个 ASPX 文件,然后获取包含其编译类型的程序集:

var filePath = Directory.EnumerateFiles(HttpRuntime.AppDomainAppPath, "*.aspx")
.FirstOrDefault();
var assembly = BuildManger.GetCompiledType(filePath).Assembly;

如果没有任何 ASPX 文件,您可以尝试 ASHX 或 ASMX 或 CSHTML。

对于每个文件都有自己的程序集的网站项目,这将无法正常工作。

关于c# - 在没有 Global.asax 的情况下,如何在 ASP.NET 中获取 Web 应用程序程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18830883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com