Скомпилированный .Net код становится IL, который является промежуточным языком точно так же, как и в объектном коде Javas. Да, можно генерировать машинный код с помощью инструмента NGen . NGen связывает получившееся собственное изображение с машиной, поэтому копирование двоичного файла ngen в другую систему не даст ожидаемых результатов. Компиляция в промежуточный код позволяет принимать решения, которые могут быть приняты во время выполнения, которые иначе (легко) не могут быть приняты с помощью языка со статической типизацией, такого как C ++, это также позволяет функционировать кодам на различных аппаратных архетектурах, потому что код становится описательным в ощущение, что оно также описывает намерение того, что должно происходить в битовом (например, 32 или 64) -агностическом смысле, в отличие от машинно-специфичного кода, который работает только в 32-битных или 64-битных системах, но не в обоих.
Кроме того, NGen является необязательным, потому что, как я уже сказал, он привязывает двоичный файл к системе, он может быть полезен, когда вам нужна производительность скомпилированного машинного кода с гибкостью динамически типизированного языка, и вы знаете, что двоичный файл не будет переходить в систему, к которой он не привязан.