Why Microsoft separate the compilation of code in two part means...first code in compile in MSIL with the help of languages complier which u using and then again compile msil code by JIT to native why this both task not combined together??
To make .net code machine independent. You can code your application in any machine and once u compile it, it generates MSIL. This MSIL can be executed on any machine which has CLR and CLR (using JIT) generates Native Code based on the machine's configuration on which you are executing the MSIL.