了解Web.config文件中的ASP.NET程序集引用管理

And*_*dry 7 .net c# asp.net assemblies web-config

我有一个简单的疑问:我有一个我想参考的外部组件.我有一个Asp.Net应用程序.我想在我的Asp.Net应用程序中使用该程序集.

我添加了一个引用,VS的作用就是将我的dll放在我网站的Bin子目录中.

我认为VS会修改我的web.config文件添加外部引用...所以它只在引用GAC中的程序集时才会发生??? (鉴于需要公共令牌和版本,这是有道理的).

谢谢

Mat*_*ott 6

当CLR加载程序集以执行时,它会检查程序集的清单以确定它运行所需的依赖项.它通过一系列步骤来执行此操作:

  1. 检查重定向 -如果组件强名称,CLR将首先检查相应的配置(app.config,web.config,等),以查看是否有指定的任何绑定重定向.绑定重定向允许CLR说,我应该加载v1.0.0.0,而不是加载v2.0.0.0.如果没有找到强名称程序集的绑定重定向,它将检查GAC中的策略文件,如果未找到策略文件,则会检查machine.config.如果未指定绑定重定向,则CLR将使用调用程序集清单中指定的程序集名称来加载程序集.

  2. 检查程序集是否已加载 - CLR确定程序集先前是否已加载,如果已加载,则使用相同的加载程序集,否则继续...

  3. 从GAC加载程序集 - 如果以前无法加载程序集并且名称很强,则CLR将尝试从全局程序集缓存加载程序集.

  4. CodeBase - 如果CLR仍然无法找到程序集,它将使用该codeBase路径尝试找到程序集.

  5. 探测 - 如果CLR仍然找不到装配,它将检查装配的探测路径.默认探测路径是AppDomain当前正在加载程序集的应用程序基本路径.

(这些都改编自一篇名为Understanding .Net Assemblies and References的伟大文章).

对于Web应用程序,CLR仍然执行上述所有操作,但AppDomain应用程序基本路径是/binIIS应用程序中的文件夹.