The .NET Framework Redistributable is required by a client to run a .NET application and is available as a free download on the Internet.
Managed code is produced by a compiler that meets the Common Type System (CTS) requirements that are necessary before code produced by it can be run by the Common Language Runtime (CLR). Unmanaged code does not meet the CTS standard. The Windows API and COM objects are examples of unmanaged code.
The Common Type System defines the types and their members that must be used by compilers that create code to run on the Common Language Runtime. The Common Language Specification provides stricter requirements that ensure interoperability between languages.
All .NET compilers generate an Intermediate Language (IL) code. Since IL is compatible, irrespective of its source, the CLR doesn't care which compiler produces it.
The Global Assembly Cache (GAC) holds shared assemblies assemblies that can be used by more than one application. Assemblies in the GAC have a digital signature that uniquely identifies them, even if they have the same file name.
A strong name consists of an assembly name, a version, a culture setting, and a public key token that is required by a client to use the assembly.
A namespace usually identifies a group of types that provide related services. An assembly may contain one or more namespaces. Also, a namespace may contain types in more than one assembly.