.NET程序集加载优先级

时间:2009-10-22 10:17:23

标签: .net assemblies gac

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

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

我意识到因为GAC中的版本不是最新的版本而且有些方法丢失了,尽管编译得很好。

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

事先提前

2 个答案:

答案 0 :(得分:20)

简短回答,GAC优先于本地文件 这与我们在本机dll世界中使用的行为不同(不包括总是从SYSTEM32加载的一些系统dll,无论如何)。

为什么?
想象一下,由于程序集有错误,你有多个应用程序使用相同的程序集,你如何修复所有的应用程序? 很难开始搜索所有驱动程序上的所有应用程序,更容易将单个程序集部署到GAC并立即修复所有应用程序。

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

答案 1 :(得分:7)

是的,先检查GAC。加载规则记录在案here。要解决您的问题,您应该在更改API时更新程序集版本。