As far as I understand .NET concepts, the source code is first translated into an Assembly (IL code+meta data), which is compiled to machine code on the target machine with the CLR's JIT compiler. However I cannot really match these concepts to what I see when working on a C# project. When I build a project I get an .exe file, which I assume is the executable machine code. Where is the IL stored? Can I access it and transfer it to a different platform e.g. to Linux?
To sum up, could somebody correct my understanding and explain the outputs?