module is an
file. An assembly is
a set of one or more modules that together make up an
application. If the application is fully
contained in an
fine—that’s a one-module assembly. If the
.exe is always deployed with two
.dll files and one thinks of all three files as
comprising an inseparable unit, then the three modules together form
an assembly, but none of them does so by itself. If the product is a
class library that exists in a
.dll file, then
.dll file is an assembly. To put it
in Microsoft’s terms, the assembly is the unit of deployment in
An assembly is more than just an abstract way to think about sets of modules. When an assembly is deployed, one (and only one) of the modules in the assembly must contain the assembly manifest , which contains information about the assembly as a whole, including the list of modules contained in the assembly, the version of the assembly, its culture, etc. The command-line compiler and the Visual Studio .NET compiler create single-module assemblies by default. Multiple-module assemblies are not used in this book.
Assembly boundaries affect type resolution. When a source file is compiled, the compiler must resolve type names used in the file to the types’ definitions. For types that are defined in the same source project, the compiler gets the definitions from the code it is compiling. For types that are defined elsewhere, the compiler must be told where to find the definitions. ...