我有个简单的疑问:我有一个要引用的外部程序集。我有一个Asp.Net应用程序。我想在我的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 Assemblys and References的伟大文章)。
对于web应用程序,CLR仍然执行上述所有操作,但AppDomain
应用程序的基本路径是IIS应用程序中的/bin
文件夹。