It has been solved in the form of smartly designed assemblies.
DLLs and COM components had versioning issues. Like old DLLs would be replaced with new ones by installers resulting in breaking the apps still working with older ones more so as new ones are not always backward compatible. Installers are also reported at times to have replaced a new DLL with an old one as developers wont pay attention to setting the versions correctly and checking them while installation.
COM components addressed some of the issues by introducing guidelines on versioning and contract (the exposed interface, unlike exposed functions in DLLs) that was to be kept unchanged across different versions of the same component. Change in the contract would often mean a different component rather than a different version of the same component. Components where uniquely identified with GUIDs which were kept in registry. But it brought new irregularities to the equation like information of the newer components being borrowed by the old ones or internal changes (while keeping the contract unchanged) breaking the clients. Plus registration was always a privileged task and to get it done in single setup was hardly ever straightforward especially when the task had to be entrusted to someone else.
These and many more such issues were collectively known as DLL Hell.
Assemblies have been smartly designed combining what was good in DLLs and Components and filtering out the bad. They keep all the information about them plus a way to uniquely identify them (by public key tokens) within them. The magic lies in the fact that everything thatâs capable of running on its own on the framework is an assembly. So both client and server (library) are assemblies, and self describing while the library assembly states very specifically the permissions it needs to function properly, clients/users that can use it and its identity (public key token), the client assembly very specifically stats what version of which assembly (identifying it with the public token key) it seeks. With all the info residing within the assembly (and not anywhere outside it like in registry), installing/un-installing it is often as simple as copying/deleting it. Uninstalling a COM Component wont necessarily remove its info from the registry (which would often be borrowed by other versions), but an uninstalled assembly leaves no stains behind. More then one version of the same assembly can coexist on the system without clashes (unlike traditional DLLs). Assemblies have many more advantages, like there are designed to be temper proof, etc.
Regards
Ankur
|