我有一个项目需要使用 NHibernate 与我的 Oracle 数据库进行通信。
我工作场所的许多项目都使用 NHibernate,因此 NHibernate 程序集被放置在 Global Assembly Cache 中,这是一个我不完全了解的工具。根据我的研究,我收集了以下信息:
- 全局程序集缓存是许多项目引用的 dll 的中央存储库。这避免了 DLL Hell 的问题 - 当您的 dll 的新版本发布时,您在缓存中更新它一次,所有引用它的 .NET 项目现在都将使用新版本。
- 您不能在程序集缓存中添加对程序集的引用。“已在 GAC 中注册的程序集不会出现在 [添加引用] 列表中”。但是,您可以通过破坏注册表来强制使它们出现。
- 您可以轻松地在程序集缓存中添加对程序集的引用。“只需使用添加引用窗口添加对您在 GAC 中安装的程序集的引用”。(我倾向于不相信这一点,因为我在“添加引用”窗口中没有看到任何 GAC 程序集)。
- 我工作场所的几个项目确实引用了 GAC 中的许多程序集。这些程序集从未出现在“添加引用”菜单中,所以我知道我的前辈没有使用注册表修改技术。然而,它们显然源自 GAC——它们的文件路径是 C:\Windows\assembly 的子目录。
第二点显然与其他三点相矛盾,但如果它只是错误的,我在引用库时不会有任何问题。它肯定反映了现实,因为在“添加引用”窗口中找不到我的 GAC 程序集。
我想知道两件事:
- 开发人员何时会想要使用 GAC?没有注册表技巧就无法引用的库有什么用?
- 我的前辈在不触及注册表的情况下,采取了哪些步骤来引用 GAC 中的库?