2009-10-22 141 views

回答

20

如果两个程序集都是强命名的(签名),CLR将始终从GAC加载。

下面是运行时用来解析程序集引用(从How the Runtime Locates Assemblies)步骤:

  1. 通过检查适用 配置文件,包括 应用程序配置文件, 发行商确定正确的程序集版本策略文件和机器 配置文件。如果 配置文件位于 远程计算机上,则运行时必须首先定位并下载应用程序 配置文件 。

  2. 检查程序集名称是否已被绑定到之前,如果是, 使用先前加载的程序集。 如果先前加载 组件的请求失败,请求将立即失败 而不会尝试加载 程序集。

  3. 检查全局程序集缓存。如果在那里找到程序集,则 运行时使用此程序集。

  4. 探头的组件(...一些材料省略......)

正如在同一篇文章后说:

没有版本检测组件没有强名称,运行时 也没有在全局程序集缓存中检入没有强名称的程序集。

因此,如果您有能力从本地程序集中删除签名,那么应用程序将使用它而不是GAC中的签名。

有关运行时绑定机制的更多细节,请参阅Suzanne Cook's blog

This blog entry from Scott Hanselman也提供了一个很好的绑定过程的概述。

-1

要成功部署您的.NET Framework应用程序,您必须了解公共语言运行库如何定位并绑定到组成应用程序的程序集。默认情况下,运行时尝试与构建应用程序的程序集的确切版本绑定。该默认行为可以被配置文件设置覆盖。

您可以使用Windows软件开发工具包(SDK)中包含的程序集绑定日志查看器(Fuslogvw.exe)查看日志文件中的绑定信息。

小号