Ориентация на среду выполнения означает компиляцию для среды выполнения, то есть, помимо прочего, вывод CIL или MSIL (в отличие от машинного кода x86 / x64 / и т. Д.).
Сказать, что все, что не нацелено на среду выполнения, является "неуправляемым кодом", является чем-то вроде ложной дихотомии. Например, код, работающий на JVM, возможно, управляется, но я думаю, что в этом контексте мы можем принять предложение, означающее «без изменений [от CLR]».
Можно было бы написать C # -компилятор, который мог бы выплевывать собственный код и не предназначаться для времени выполнения (хотя вам, вероятно, понадобится некоторое время выполнения для GC по крайней мере), и в равной степени возможно написать компилятор C, который выплюнул CIL. В этом примере гипотетический компилятор C # не будет нацелен на время выполнения, но гипотетический компилятор C будет. Важным отличием здесь является отделение языка от его цели.
Приложение .NET, которое не предназначено для среды выполнения, будет противоречием. Если бы он не предназначался для среды выполнения, он не был бы приложением .NET.
Хотя с unsafe
и P/Invoke
это может стать нечетким. Когда вы используете такие функции, как P/Invoke
или COM-взаимодействие, вы в конечном итоге нацеливаетесь на среду выполнения и дополнительно некоторые другие вещи . Это не означает, что вы перестали ориентироваться на среду выполнения, это просто означает, что у вас есть дополнительные зависимости помимо времени выполнения. Отслеживание такого рода вещей - вот почему существуют такие вещи, как CLSCompliantAttribute
.