我想从该应用程序引用的任何代码动态获取当前正在执行的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程序集名称的代码需要对该类型的引用(这将是一个循环引用)
有什么想法吗?
答案 0 :(得分:1)
作为一个非常丑陋的黑客,你可以在应用程序中找到一个ASPX文件,然后获得包含其编译类型的程序集:
var filePath = Directory.EnumerateFiles(HttpRuntime.AppDomainAppPath, "*.aspx")
.FirstOrDefault();
var assembly = BuildManger.GetCompiledType(filePath).Assembly;
如果没有任何ASPX文件,您可以尝试ASHX或ASMX或CSHTML。
这对于每个文件都有自己的程序集的网站项目都无法正常工作。