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

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

我想要的是这个问题所要求的:获取Web应用程序程序集名称,而不管当前正在执行的程序集

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

我想过的一种方式是通过某种方式过滤当前AppDomain中的程序集,但我不知道这可能是什么。 Web应用程序和另一个正常的DLL的程序集是否有区别? 我知道Visual Studio中的项目有一个GUID来表示项目类型(ASP.NET Web App,类库,MVC应用程序等)。此信息以某种方式呈现在已编译的程序集中?

另一种方法是使用System.Web.Hosting命名空间中的ApplicationHost ,但只有静态数据,并且没有任何关于程序集的信息。

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

有任何想法吗?


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

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

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

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

链接地址: http://www.djcxy.com/p/23717.html

上一篇: How can I get the web application assembly in ASP.NET without Global.asax?

下一篇: Find all embedded resources in another assembly