【问题标题】:.NET assembly loading priorities.NET 程序集加载优先级
【发布时间】:2009-10-22 10:17:22
【问题描述】:

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

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

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

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

提前通知

【问题讨论】:

    标签: .net assemblies gac


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢答案,特别是关于版本控制的最后一部分。
    【解决方案2】:

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

    【讨论】:

    • 感谢链接,非常有用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2012-10-15
    • 1970-01-01
    • 2011-07-19
    • 2014-04-05
    相关资源
    最近更新 更多