An assembly is the .NET unit of versioning and deploying code modules. An assembly consists of Portable Executable (PE) files. PE files can be either dynamic link library (.dll) files or .exe files. These PE files are in the same basic format as normal Windows PE files but with a slight difference; they use the PE header, but the contents are in Microsoft Intermediate Language (MSIL) rather than machine binaries.
Assemblies contain versioning information. An assembly is the minimum unit for a single version of a piece of code. Multiple versions of the same code can run side by side in different applications, with no conflicts, by packaging the different versions into separate assemblies and specifying in the configuration files which version is current.
Assemblies are self-describing because they contain metadata that fully describes the assembly and the classes, methods, and types the assemblies contain. One of the files in the assembly contains a manifest as part of the metadata, which details exactly what is in the assembly. This includes identification information (e.g., name, version), a list of the types and resources in the assembly, a map to connect public types with the implementing code, and a list of other assemblies referenced by this assembly.
Sites created in both Web Site Projects and Web Application Projects consist of all the files and resources in their virtual root directory and its subdirectories. One standard subdirectory is the bin directory. Any assemblies ...