2011-06-28 30 views
7

我有一个简单的疑问:我有一个我想引用的外部程序集。我有一个Asp.Net应用程序。我想在我的Asp.Net应用程序中使用该程序集。了解Web.config文件中的ASP.NET程序集引用管理

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

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

三江源

回答

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的应用程序基路径。

(这都是从一篇名为Understanding .Net Assemblies and References的大文章改编而来)。

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

+0

链接已关闭,但如果有人发现文章的副本,我会感兴趣。 – GuiSim