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