2009-10-22 96 views
16

我有3个项目(GUI,BL和DAL)的解决方案。 DAL程序集已签署并部署在GAC中。.NET程序集加载优先级

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

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

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

韩国社交协会提前

回答

19

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

为什么?
想象一下,如果程序集有一个错误,那么现在有多个应用程序使用相同的程序集,那么如何修复所有应用程序? 很难开始搜索所有驱动程序上的所有应用程序,因此更容易将单个程序集部署到GAC并一次性修复所有应用程序。

至于你的问题,如果你改变了API,你需要改变该程序集的程序集版本,这样Fusion融合引擎会选取本地文件夹中的版本。

+0

Tks的答案,特别是关于版本控制的最后部分。 – Dante 2009-10-22 10:31:22

7

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

+0

Tks为链接,非常有用! – Dante 2009-10-22 10:32:30