.NET程序集加载优先级

19

我有一个包含三个项目的解决方案(GUI, BL和DAL)。DAL程序集已被签名并部署在全局程序集缓存中(GAC)。

当我构建解决方案时,DAL会被编译并放置在主项目的bin文件夹中。但是当我运行应用程序时,它会加载GAC版本而不是本地版本。这是为什么?

我发现,因为GAC中的版本不是最新的,一些方法缺失了,尽管编译没有问题。

GAC是否优先于本地的bin文件夹?

提前感谢!

2个回答

22

简短回答是是的,GAC优先于本地文件。
这与我们在本机dll世界中所习惯的行为不同(除了一些系统dll始终从SYSTEM32加载)。

为什么?
假设您有多个应用程序使用相同的程序集,现在该程序集有一个错误,如何修复所有应用程序? 开始搜索所有驱动器上的所有应用程序很困难,更容易部署单个程序集到GAC并一次性修复所有应用程序。

至于您的问题,如果更改API,则需要更改该程序集的程序集版本,这样融合引擎将挑选本地文件夹中的版本。


感谢您的回答,特别是关于版本控制的最后一部分。 - Dante

8

是的,它首先检查全局程序集缓存(GAC)。加载规则在这里有文档记录。为了解决您的问题,您应该在更改API时更新程序集版本。


谢谢提供链接,非常有用! - Dante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接