Assemblies are the basic unit of deployment and versioning in .NET. You can write and install simple applications without knowing much about assemblies. More complex applications require an in-depth understanding of the structure of assemblies, the metadata they contain, and how assemblies are located and loaded by the CLR.
You have learned how the identity of an assembly is used to allow multiple versions of an assembly to be installed on a machine and run side by side. This chapter explained how an assembly is versioned, the process by which the CLR resolves an external assembly reference, and how you can modify this process through the use of configuration files.
You also learned about how an assembly stores information, such as version number, strong name, and culture, about any external assemblies that it references, and information checked at run time to ensure that the correct version of the assembly is referenced. You saw how you can use versioning policies to override this in the case of a buggy assembly. The assembly is the single biggest aid in reducing the errors that can occur due to DLL hell, and in helping with deployment.
You've also seen how to examine assemblies to discover the types they contain, and the members of those types. You can even invoke a method on a type using the capabilities of reflection.
The chapter also discussed the capability to load an assembly dynamically, based on a location that is derived at run time. This capability is useful ...