Assemblies
The .NET Framework makes use of assemblies for all .NET code. All code that the .NET runtime executes (i.e. all executables) must reside in an assembly. This makes sure that all .exe and .dll files are included in the system folder and it contains the applicaiton code and resources. When using VisualStudio .NET to produce a project, each set of code will contain a sigle assembly.

Programmers can assign multiple assemblies to a system, but it is imperative that the files are present in the system when the loader is executing and looking for the DLL's and EXE's.

Deploying the code is quite a different story. With the use of multiple source code programs, the assemblies can be used by one application or shared with other applications. Many general utility objects that are to be used in many different programs should be shared among programs while specialized code for a generator should be kept private and not a shared assembly.

.NET does allow some easier use of versioning to update the DLL's in the system. Many developers have come across problems when updating software in making DLL's match up with what they want it to. In .NET, every assembly contains a version information in its manifest. This information consists of a compatability version, which is essentially a four numbers used by the CLR to enforce versioning caused by the client.