2

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

我想要这个问题的确切内容:获取 Web 应用程序程序集名称,无论当前正在执行的程序集如何

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

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

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

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

有任何想法吗?

4

1 回答 1

1

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

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

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

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

于 2013-09-16T14:52:08.577 回答