gpt4 book ai didi

asp.net - .Net CLR 如何识别哪个 .DLL 是 Web 应用程序中的主(启动)DLL?

转载 作者:行者123 更新时间:2023-12-02 11:25:16 24 4
gpt4 key购买 nike

我想知道 CLR 如何找到 Web 应用程序的入口点/主 DLL。 CLR 如何知道我的 bin 目录中存在的众多 DLL 中的哪一个是我网站的 DLL?

我的 web.config 中没有任何标识信息将一个程序集指定为我的“主”程序集,那么这个选择过程是如何发生的呢?

这个选择/初始化过程是如何工作的?

最佳答案

这完全取决于您是否使用 Web 表单或 MVC。 CLR 本身不支持此操作,而是由 ASP.NET 运行时和 IIS 完成所有相关工作。

网络表单

在 Web 表单中,您的 .aspx 和“代码隐藏”使用类继承来定义该关系。 @Page 指令有一个 Inherits 属性,定义 ASPX 将继承哪个类。 ASPX 本身会即时编译为继承该类型的类(或使用 aspnet_compiler.exe 预编译)。

当 IIS 访问 ASPX 页面时,它会通过集成处理程序或 aspnet_isapi 处理程序将其传递到 PageHandlerFactory

在这种情况下,没有“启动”DLL,它使用 ASPX 编译所针对的 DLL。

MVC

当请求到达 ASP.NET 运行时时,它会查看是否有与路由匹配的 Controller 。然后它使用 DefaultControllerFactory尝试将路线映射到 Controller 。最终将调用 GetControllerType 来尝试查找 Controller 的类型,从而进一步挖掘名为 ControllerTypeCache 的内部类型。

ControllerTypeCache 完成了大部分的魔力。它使用 EnsureInitialized 进行初始化,其工作是填充使用 BuildManager.GetReferencedAssemblies 引用的所有程序集的所有类型的列表。 。然后,它会抓取每个程序集,查找与 Controller 匹配的类型,例如实现 IController、公开等。

How does .NET know to fire up the MVC runtime

MVC 运行时是一个 HttpHandler。 IIS 直接将其自动传递给 MVC 处理程序(较新版本的框架和 IIS 会这样做),或者您必须将 MVC 处理程序放在 web.config 的 httpHandlers 部分中。

在旧版本的 MVC 中,您必须手动注册 MvcHttpHandler 。从 ASP.NET 4.0 开始,许多 URL 路由内容被移至 ASP.NET 框架本身,因此它现在具有开箱即用的处理程序。

关于asp.net - .Net CLR 如何识别哪个 .DLL 是 Web 应用程序中的主(启动)DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746294/

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