CHAPTER 14 BUILDING AND CONFIGURING CLASS LIBRARIES
information are termed strongly named. As you will see in this chapter, by using a strong name, the CLR
is able to ensure that the correct version of an assembly is loaded on behalf of the calling client.
Assemblies Are Self-Describing
Assemblies are regarded as self-describing, in part because they record every external assembly they
must have access to in order to function correctly. Thus, if your assembly requires
System.Windows.Forms.dll and System.Core.dll, this will be documented in the assembly’s manifest.
Recall from Chapter 1 that a manifest is a blob of metadata that describes the assembly itself (name,
version, required external assemblies, etc.).
In addition to manifest data, an assembly contains metadata that describes the composition
(member names, implemented interfaces, base classes, constructors, and so forth) of every contained
type. Because an assembly is documented in such detail, the CLR does not consult the Windows system
registry to resolve its location (quite the radical departure from Microsoft’s legacy COM programming
model). As you will discover during this chapter, the CLR makes use of an entirely new scheme to resolve
the location of external code libraries.
Assemblies Are Configurable
Assemblies can be deployed as “private” or “shared.” Private assemblies reside in the same directory (or
possibly a subdirectory) as the client application that uses them. Shared assemblies, on the other hand,
are libraries intended to be consumed by numerous applications on a single machine and are deployed
to a specific directory termed the global assembly cache, or GAC.
Regardless of how you deploy your assemblies, you are free to author XML-based configuration
files. Using these configuration files, you can instruct the CLR to “probe” for assemblies at a specific
location, load a specific version of a referenced assembly for a particular client, or consult an arbitrary
directory on your local machine, your network location, or a web-based URL. You’ll learn a good deal
more about XML configuration files throughout this chapter.
Understanding the Format of a .NET Assembly
Now that you’ve learned about several benefits provided by the .NET assembly, let’s shift gears and get a
better idea of how an asse