Общеязыковая среда выполнения (Common Language Runtime, CLR) - это среда выполнения, которая подходит для разных языков программирования. Функциональные возможности CLR доступны в любых языках программирования, использующих эту среду. Фактически во время выполнения программы в среде CLR неизвестно, на каком языке программирования разработчик написал исходный код. Разрабатывать программное обеспечение можно на любом языке программирования, если используемый компилятор этого языка предназначен для CLR.
Процесс компиляции:
Файл-исходник на C# (Basic, IL) -> Компилятор С# (Basic, IL) -> Управляемый модуль (IL и метаданные)
Управляемый код – программный код, который при своем выполнении способен использовать службы, предоставляемые CLR. Соответственно, неуправляемый код подобной способностью не обладает.
Структура управляемого модуля:
Часть |
Описание |
Заголовок РЕ32 или РЕ32+ |
Стандартный заголовок РЕ-файла Windows. Показывает тип файла: GUI, CUI или DLL, он также имеет временную метку, показывающую, когда файл был собран. Для модулей, содержащих только IL-код, основной объем информации в заголовке РЕ32(+) игнорируется. В модулях, содержащих машинный код, этот заголовок содержит сведения о машинном коде |
Заголовок CLR |
Содержит информацию (интерпретируемую CLR и утилитами), которая превращает этот модуль в управляемый. Заголовок включает нужную версию CLR, некоторые флаги, метку метаданных MethodDef точки входа в управляемый модуль (метод Main), а также месторасположение/размер метаданных модуля, ресурсов, строгого имени, некоторых флагов и пр. |
Метаданные |
Каждый управляемый модуль содержит таблицы метаданных. Есть два основных вида таблиц - это таблицы, описывающие типы данных и члены, определенные в исходном коде, и таблицы, описывающие типы данных и члены, на которые имеются ссылки в исходном коде |
Код IntermediateLanguage |
Код, создаваемый компилятором при компиляции исходного кода. Впоследствии CLR компилирует IL в команды процессора |