a namespace is common feature in computing. it defines a context for symbol or object names to allow uniqueness. full description:
in java, a package creates a namespace, and is based on the folder name the classes are defined in. in c#/vb.net, the namespace is defined in the source. in .net file location has no impact on class symbols. also in .net a namespace can span compiled units (dll's).
the the .net runtime was designed similar to java. rather than producing native machine code, it produces code for a virtual machine. MSIL defines the instruction set of the visual machine. MSIL is basically the machine language of the .net runtime virtual machine. so .net uses true compilers, they just compile to MSIL machine code rather than native hardware.
just like java you need an application that implements the virtual machine to run MSIL code. the implementation of the MSIL visual machine is up to the designer. It can be a pure interpreter or use JIT for performance. the JIT support can include a JIT before running code, or gathering runtime metrics and JIT after metrics are gathered.
work is also being done to directly compile MSIL to native machine code (AOT). There are restrictions in this as typically native code does have good support of dynamic code.