No entraré en muchos detalles aquí, porque otros ya han cubierto una gran cantidad, pero quiero aclarar algunos puntos que otras respuestas no han explicado bien o correctamente. Esto es en gran parte pedante, y para el 99,99999% de los casos se puede pensar en "C# y CIL/MSIL es código administrado", pero hay algunas sutilezas en esto.
Primero, CIL/MSIL es conocido como un "lenguaje intermedio", lo que significa que es un lenguaje de computadora que se utiliza como un paso intermedio entre el código fuente y el código de máquina nativo final. Sin embargo, esto no tiene que ser necesariamente el caso. He oído hablar de proyectos experimentales donde han creado una CPU que ejecuta CIL (o el equivalente de Java llamado Java Byte Code) directamente sin convertirlo primero a un formato nativo (básicamente, el CIL es la forma nativa).
Código administrado se refiere al código que es "administrado" por un tiempo de ejecución administrado de algún tipo. Esto generalmente significa que el código es basura recolectada, y tiene algún tipo de capa de seguridad que evita cosas como desbordamientos de búfer y otros tipos de problemas que pueden ocurrir en el código nativo. En .net esto se conoce como Common Language Runtime (CLR)
En los viejos tiempos, esto solía conocerse como una "máquina virtual" y por qué el entorno de Java se llama JVM, aunque ese término ahora es en gran parte un nombre inapropiado Hoy en día, con los compiladores JIT (Just in time), no existe una "máquina virtual" real, sino que es una capa de código que "envuelve" el código nativo compilado para garantizar que no se rompen las reglas y para limpiar después tu codigo. También abstrae algunas de las cosas específicas de la plataforma para que el CIL no tenga que preocuparse por ellas.
Por lo tanto, el código administrado se refiere al concepto de código que se ejecuta en un tiempo de ejecución administrado. CIL se considera código administrado cuando se ejecuta en un tiempo de ejecución, como el entorno de tiempo de ejecución .NET.
C# y VB.NET a menudo se consideran "Idiomas administrados" porque normalmente se compilan en CIL y se ejecutan en un tiempo de ejecución administrado. Sin embargo, esto no necesariamente tiene que ser el caso (aunque si sigue la letra de la especificación, probablemente tiene que ser el caso). Por ejemplo, hay compiladores que compilarán C# directamente al código nativo sin un nivel intermedio, y hay intérpretes en tiempo de ejecución para C# que no compilan el código en absoluto, sino que lo "interpretan" en tiempo de ejecución.
Así que lo esencial es que el código administrado y CIL son dos cosas diferentes, pero están relacionados.
Y oficialmente se llama CIL, Common Intermediate Language, según [ECMA] (http://www.ecma-international.org/publications/standards/Ecma-335.htm) – Bob
NGEN es generalmente ** not ** utilizado al compilar con código nativo, en su lugar se utiliza el compilador JIT. Y "[código de bytes] (http://en.wikipedia.org/wiki/Bytecode)" es ** no ** otro nombre para código nativo, es otro nombre para código administrado. – svick
De hecho, mencionó JIT también ahora y decidió usar 'native' para evitar confusiones. –