我有一个包含三个项目的解决方案(GUI, BL和DAL)。DAL程序集已被签名并部署在全局程序集缓存中(GAC)。
当我构建解决方案时,DAL会被编译并放置在主项目的bin文件夹中。但是当我运行应用程序时,它会加载GAC版本而不是本地版本。这是为什么?
我发现,因为GAC中的版本不是最新的,一些方法缺失了,尽管编译没有问题。
GAC是否优先于本地的bin文件夹?
提前感谢!
我有一个包含三个项目的解决方案(GUI, BL和DAL)。DAL程序集已被签名并部署在全局程序集缓存中(GAC)。
当我构建解决方案时,DAL会被编译并放置在主项目的bin文件夹中。但是当我运行应用程序时,它会加载GAC版本而不是本地版本。这是为什么?
我发现,因为GAC中的版本不是最新的,一些方法缺失了,尽管编译没有问题。
GAC是否优先于本地的bin文件夹?
提前感谢!
简短回答是是的,GAC优先于本地文件。
这与我们在本机dll世界中所习惯的行为不同(除了一些系统dll始终从SYSTEM32加载)。
为什么?
假设您有多个应用程序使用相同的程序集,现在该程序集有一个错误,如何修复所有应用程序?
开始搜索所有驱动器上的所有应用程序很困难,更容易部署单个程序集到GAC并一次性修复所有应用程序。
至于您的问题,如果更改API,则需要更改该程序集的程序集版本,这样融合引擎将挑选本地文件夹中的版本。