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

时间:2013-09-16 14:45:38

标签: c# asp.net

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

我想要问这个问题: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 App,类库,MVC应用程序等)。这些信息是否以某种方式出现在已编译的程序集中?

另一种方法可能是使用ApplicationHost命名空间中的System.Web.Hosting,但只有静态数据,而且没有关于程序集的内容。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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