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

时间:2011-06-28 21:28:31

标签: c# .net asp.net web-config assemblies

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

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

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

三江源

1 个答案:

答案 0 :(得分:6)

当CLR加载程序集以供执行时,它会检查程序集的清单以确定它运行所需的依赖项。它通过一系列步骤来实现这一目标:

  1. 检查重定向 - 如果程序集具有强名称,则CLR将首先检查相应的配置(app.configweb.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的应用程序基本路径。

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

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