.NET binaries takes the same file extensions as unmananged windows binaries.These binaries in the form of .dll or .exe. This applies to all .NET languages. Normally .NET binaries do not have platform-specific code, ratjer it contains platform-agnostic code. This code is called Intermediate Language(IL) code.
IL code can also be called MSIL(Microsoft Intermediate Language) or CIL(Common Intermediate Language). All these describe the same instructon set. The resulting blob from the compilation of .NET program is what is called an assembly. This blob is in the form of :
Assemblies comprise CIL code. CIL code are not compiled to platform specific instructions until necessary. This is until the point when a block of CIL instructions is referenced for use by the .NET runtime.
If you come from Java world then this is the same as Java Bytecode atleast conceptually.
However, assemblies don't just contain instructions. They also contain metadata.
The metadata :
Describes the characteristics of the types existing within that binary. These characteristics of types comprise:
Describes the assemblies. This metadata that describes assemblies is termed as the manifest.The manifest contains: