An assembly implements the following set of information for one or more code files:
Versioning Group modules that should have the same version information.
Deployment Group code modules and resources that support your model of deployment.
Reuse Group modules if they can be used together logically for some purpose. For example, an assembly consisting of types and classes used infrequently for program maintenance can be put in the same assembly. In addition, types that you intend to share with multiple applications should be grouped into an assembly and the assembly should be signed with a strong name .
Security Group modules containing types that require the same security permissions.
Scoping Group modules containing types whose visibility should be restricted to the same assembly.
Assemblies are nothing more than text files similar to source code. They can be embedded within a CLR-executable program, or defined outside the CLR for multiple files. Many programs can include an assembly in the single executable files. The following is a brief example of an Assembly for a C# project: