Pop*_*lin 66
当应用程序A安装共享DLL v1.0时,应用程序B出现并将共享DLL更新到v1.1,它应该兼容但行为略有不同,然后应用程序A停止正常工作并重新安装v1.0然后应用程序B停止工作......现在想象一下,有两个以上的应用让我们说十几个:DLL Hell.
Nei*_*ell 13
DLL地狱主要来自COM时代,其中必须注册COM dll,并且它的客户端将在注册表中查找它.这是一场噩梦,因为可以修改文件系统(*.dll,*.ocx),在注册表中留下过时的条目.应用程序将停止工作,这太可怕了.
然后,您将获得新应用程序安装并注册新版本DLL的方案,从而打破真正需要旧版本的应用程序.您将重新安装旧应用程序,并在此过程中中断新应用程序.
使用.NET,不需要注册DLL(GAC是一种特殊情况,并且可以避免上述版本控制问题),加载器只需通过查找正确的路径来获取程序集.
简而言之,在旧的COM时代,每个COM组件都必须在使用之前注册(在注册表中创建了一个条目).然后你的程序将通过提供类型名称(这是注册表中的一个键)来创建一个新对象.现在你无法控制哪个dll真正被加载,任何其他软件都会注册这个dll的一些更新/更旧/完全不同的版本,等等.
简单 - 在以前版本的Windows中,可能有多个应用程序都试图访问同一个共享库.没问题,这就是他们共享的原因.当不同的应用程序试图从中心位置访问同一程序集的不同版本时,问题就出现了.提供dll的所有更高版本是向后兼容的,并且您拥有最新版本应该没有问题,但是如果您安装需要v2的应用程序,然后安装需要(并包含)版本1的应用程序. x,您可能会发现第一个应用程序停止工作(因为v2 dll已被v1.x覆盖).
最新版本的Windows能够存储多个版本的dll,并根据请求提供正确的版本.