Packaging and Deployment: Assemblies
.NET assemblies were developed to try to improve the ways previous technologies packaged and deployed components. To make the most of .NET assemblies, it’s best to first understand the rationale behind them. Understanding the “why” will make the “how” a lot easier.
DLLs and COM Components
Microsoft’s first two attempts at component technologies (first, raw DLLs exporting functions, and then later, COM components) used raw executable files for storing binary code. In COM, component developers compiled their source code, usually into a DLL or sometimes into an EXE, and then installed these executables on the customer’s machine. Higher-level abstractions or logical attributes shared by all the DLLs had to be managed manually by both the component vendor and the client-side administrator. For example, even though all DLLs in a component-oriented application should be installed and uninstalled as one logical operation, developers had to either write installation programs to repeat the same registration code for every DLL used, or copy them one by one. Most companies didn’t invest enough time in developing robust installation programs and procedures, and this in turn resulted in orphaned DLLs bloating the clients’ machines after uninstallation. Even worse, after a new version was installed, the application might still try to use the older versions of the DLLs.
Another attribute that should have applied logically to all DLLs that were part of the same ...