A colleague complained that the "assembly" I gave him (a regular, non-NET compiled C++ DLL-file) didn't work. I replied "What's... an assembly?".
So by reading this dot net tutorial and this similar SO question my understanding is, that DLL and EXE files (and also executables / shared libraries made in Linux using Mono of course) created by NET are fundamentally different from 'regular' native machine code libraries and executables, because they don't contain native byte code, but rather some strange MSIL (Microsoft Intermediate Language) code as far as I understand.
So I'm asking
- Why are these .NET MSIL-containing files called assemblies? What do they assemble or what are they assembling?
and also
- Why didn't Microsoft let those assemblies have different file extensions than native executables / shared libraries? They don't work without a NET-interpreter (or is it called NET-VM?), so why not distinguish them from regular native code?
I mean Python has .py files, Java has .class / .jar files and so on... This could have prevented some confusion in my case.