При создании управляемого кода компилятор языка программирования, поддерживающего .NET (Visual Basic .NET, C#, J#. а с появлением Delphi 8 еще и Delphi4 ) транслирует исходный код в набор машинно-независимых инструкций языка CIL.
Замечание:
Синтаксис того или иного языка никак не влияет на CLR. Однако некоторые языки (C#, Delphi), не имеют существенных синтаксических ограничений и позволяют использовать практически все возможности CLR.
Эти инструкции могут затем легко переводиться в машинно-зависимые. CIL включает инструкции для загрузки, сохранения, инициализации объектов, вызова их методов, а также для логических и арифметических операций, управления потоками, прямого доступа к памяти, поддержки исключений и др. Перед выполнением программы инструкции CIL преобразуются JIT-компилятором CLR в машинно-зависимые инструкции процессора.
Одновременно с инструкциями CIL производятся также метаданные. Метаданные описывают типы вашего кода, в том числе содержат описание каждого типа, сигнатуры вызова методов объектов, ссылки на членов вашего кода и другие необходимые при выполнении данные. MSIL и метаданные содержатся в выполняемом файле формата РЕ, который основан на расширенной версии опубликованного формата MS PE и общего объектного файлового формата, использующегося исторически для выполняемых программ. Этот файловый формат, который объединяет CIL-код и метаданные, предоставляет операционной системе компьютера исполнения всю необходимую информацию для создания объектов CLR. Присутствие в CIL-кодах метаданных позволяет коду описывать самого себя и, таким образом, отказаться от библиотек типов и языка IDL (Interface Definition Language - язык описания интерфейсов). CLR находит и извлекает метаданные из РЕ-файла по мере надобности в ходе прогона.