In the .NET environment, assemblies are the fundamental units of development and deployment; although the various languages allow the .NET programmer to work with elements as fine-grained as classes or functions, these types must belong as part of an assembly in order to be loaded and used. Consequently, the assembly is the core of the component model in .NET.
Assembly type is the Reflection API object model
representing the assembly. An assembly (either a .DLL or .EXE—to the CLR,
there is no difference) consists of one or more modules; most assemblies
are in fact single-module assemblies. (Multimodule assemblies are
certainly possible, but usually not necessary for most developers’ needs.
As such, they are not discussed here.) C# programmers can use the object
model in the
Assembly class to discover information
about a particular assembly—for example, an assembly knows the modules
contained within it, and each module knows the types defined and bound
to that module. Thus, for any random assembly, a C# program can enumerate
each type defined inside that assembly. This is, in fact, what the
WinCV.exe sample program (see the .NET SDK, in the \bin subdirectory) does.
(The ILDasm.exe application provides similar results, but uses unmanaged APIs
to view into an assembly, rather than Reflection.)
Assembly API can be broken into two collections: those
representing operations against a particular assembly (indicated by a
Assembly instance), and ...