我不断听到DLL地狱 - 这是什么一回事呢?
Answer 1:
这是当应用程序A安装了一个共享DLL V1.0,应用B来并更新共享DLL到1.1版应该是兼容的,但也有略有不同的行为,那么应用程序A停止正常工作,并重新安装V1.0然后应用B停止工作...现在有2级以上的应用程序想象这让我们说十:DLL地狱。
Answer 2:
DLL地狱主要是从COM天,其中一个COM DLL必须注册,和它的客户看起来它在注册表中。 这是一场噩梦,因为文件系统(* .DLL,* .OCX)可以修改留下过时的条目在注册表中。 应用程序将停止工作,这太可怕了。
然后你会得到其中一个新的应用程序安装和注册DLL的新版本方案,从而打破应用程序,真正想要的旧版本。 你会重新安装旧的应用程序,并打破在这个过程中新的。
在.NET,有没有需要注册的DLL(GAC中是一个特例,并有规范来避免上述问题的版本),装载机只是在寻找正确的路径拿起组件。
Answer 3:
在美好的旧COM天简而言之每个COM组件都必须登记(条目在注册表中创建)的使用它。 那么你的程序将通过提供类型名称(这是在注册表中的键)创建新的对象。 而现在你没有在哪一个DLL真的会被加载任何控制,将任何其他软件注册一些较新/旧的/完全不同版本的DLL等的
Answer 4:
简单 - 在以前的Windows版本中,可能有多个应用程序的所有试图访问同一共享库。 有没有问题,这就是为什么他们是共享的。 当不同的应用程序试图从一个中心位置访问不同版本的同一总成的问题就来了。 提供所有DLL的更高版本是向后兼容的,并且您有最新的版本应该没有问题,但如果你安装需要V2的应用程序,然后安装并应用程序,需要(包括)版本1。 X,你可能会发现第一个应用程序停止工作(因为V2 DLL已被覆盖与1.x版)。
窗口的最近版本能够存储一个DLL的多个版本,并且提供对请求的正确的一个。
Answer 5:
它发生在一个应用程序安装一个dll到系统中,而另一个应用程序与不与旧的一个兼容的dll的另一个版本来替换它。
这是不是在C#(和.NET一般),因为.NET程序集有足够的智慧是识别版本的(和.NET具有管理不同版本的GAC)的问题。