引用全局程序集缓存

Kev*_*vin 6 .net global-assembly-cache visual-studio-2008

我有一个项目需要使用NHibernate与我的Oracle数据库进行通信.

我工作场所的许多项目都使用NHibernate,因此NHibernate程序集被放置在全局程序集缓存中,这是一个我不太了解的工具.根据我的研究,我收集了以下内容:

  1. 全局程序集缓存是指,被许多项目中引用的DLL的中央存储库.这就避免了DLL Hell的问题 - 当你的dll的新版本发布时,你在缓存中一次更新它,所有引用它的.NET项目现在将使用新版本.
  2. 您无法在程序集缓存中添加对程序集的引用." 已在GAC中注册的程序集不会出现在[添加引用]列表中 ".但是,您可以通过破坏注册表来强制使它们出现.
  3. 您可以轻松地在程序集缓存中添加对程序集的引用." 只需使用"添加引用"窗口添加对您在GAC中安装的程序集的引用 ".(我倾向于不相信这一点,因为我在"添加引用"窗口中没有看到任何GAC程序集).
  4. 我工作场所的几个项目确实引用了GAC中的许多程序集.这些程序集永远不会出现在"添加引用"菜单中,所以我知道我的前辈们没有使用注册表修改技术.但它们显然源自GAC - 它们的文件路径是C:\ Windows\assembly的子目录.

第二点显然与其他三个相矛盾,但如果它完全是假的,我就不会有任何引用库的问题.它肯定反映了现实,因为我的GAC程序集无法在"添加引用"窗口中找到.

我想知道两件事:

  • 开发人员何时想要使用GAC?没有注册表欺骗就无法引用的库有什么用呢?
  • 我的前任采取了哪些步骤来引用GAC中的库,而不涉及注册表?

Han*_*ant 5

所有引用它的.NET项目现在都将使用新版本.

不,那叫做DLL地狱.应用程序引用程序集的特定版本.您可以更新DLL并更新使用它的应用程序.并且不会破坏使用该DLL的旧应用程序,但不会重新编译.您可以使用GAC执行此操作,因为它可以存储DLL的多个版本.或者,您可以通过将DLL保存在与应用程序的EXE相同的目录中来轻松完成此操作.

GAC中的程序集不会出现在"添加引用"对话框中.必然如此,您不知道您的用户在她的GAC中存储了什么.您可以使用开发计算机上的"浏览"选项卡,这样您就可以确保使用DLL 的特定版本.

GAC对需要分发安全更新的公司非常重要.像微软一样.它确保没有浮动的DLL的未修补副本.对于[ComVisible]程序集解决COM的DLL Hell问题也很重要.就是这样.