我有一个简单的疑问:我有一个我想引用的外部程序集。我有一个Asp.Net应用程序。我想在我的Asp.Net应用程序中使用该程序集。了解Web.config文件中的ASP.NET程序集引用管理
我添加了一个引用,VS所做的就是将我的dll放在我的网站的Bin子目录中。
我以为VS会修改我的web.config文件添加外部引用... 所以只有在GAC引用程序集时才会发生? (这是有道理的,因为需要公共令牌和版本)。
三江源
我有一个简单的疑问:我有一个我想引用的外部程序集。我有一个Asp.Net应用程序。我想在我的Asp.Net应用程序中使用该程序集。了解Web.config文件中的ASP.NET程序集引用管理
我添加了一个引用,VS所做的就是将我的dll放在我的网站的Bin子目录中。
我以为VS会修改我的web.config文件添加外部引用... 所以只有在GAC引用程序集时才会发生? (这是有道理的,因为需要公共令牌和版本)。
三江源
当CLR加载您执行组装,它会检查程序集的清单,以确定需要哪些依赖它来运行。它通过一系列的步骤来做到这一点:
检查重定向 - 如果组件强名称,CLR将首先检查相应的配置(app.config
,web.config
等),看如果有指定的绑定重定向。绑定重定向允许CLR说,我应该加载v1.0.0.0,而不是加载v2.0.0.0。如果未找到强名称程序集的绑定重定向,它将检查GAC中的策略文件,如果找不到策略文件,则会检查machine.config
。如果未指定绑定重定向,则CLR将使用调用程序集清单中指定的程序集名称加载程序集。看到
检查装配已经加载 - CLR的确定组装之前已经加载,如果有,它会使用相同的加载的程序集,否则继续...
从GAC加载程序集 - 如果程序集先前未加载且名称很强,CLR将尝试从全局程序集缓存中加载程序集。
CodeBase - 如果CLR仍然找不到装配体,它将使用codeBase
路径尝试找到装配体。
探测 - 如果CLR仍然找不到组件,它将检查组件的探测路径。默认探测路径是当前正在装入组件的AppDomain
的应用程序基路径。
(这都是从一篇名为Understanding .Net Assemblies and References的大文章改编而来)。
对于您的Web应用程序,CLR仍然执行上述所有操作,但AppDomain
应用程序基本路径是您的IIS应用程序中的/bin
文件夹。
链接已关闭,但如果有人发现文章的副本,我会感兴趣。 – GuiSim