CLR ("Common Language Runtime", "общеязыковая исполняющая среда") - это компонент .NET Framework, основной задачей которого является управление интерпретацией и исполнением кода IL. CLR отвечает за изоляцию памяти приложений, проверку типов, безопасность кода, преобразование IL в машинный код. Главная ее роль заключается в том, чтобы обнаруживать и загружать типы .NET и производить управление ими в соответствии с полученными командами. Включает в себя Common Type System и Common Laguage Specification.Он обеспечивает среду выполнения .NET-приложений. CRL задает общую систему типов, используемую всеми языками программирования. За счет единой системы типов достигается более простая интеграция компонентов и кода, написанных на разных языках программирования. CLR позволяет выполнять интеграцию кода в режиме дизайна, а не в режиме выполнения.
Работа CLR.На верхнем уровне среда активизирует объекты, производит проверку безопасности, размещает объекты в памяти, выполняет их, а также запускает сборщик мусора
Загрузка CLR. Каждая создаваемая сборка представляет собой либо исполняемое приложение, либо DLL, содержащую набор типов (компонентов) для использования в исполняемом приложении. За управление исполнением кода отвечает CLR. Это значит, что на компьютере, выполняющем приложение, должен быть установлен каркас. NET Framework.
.NET F. поддерж. 2 вида сборок: с нестрогими именами и со строгими именами. Сборки со строгими и нестрогими именами идентичны по структуре. Оба типа сборок компонуются при помощи одних и тех же инструментов, например компилятора С#. Но отличаются тем, что первые подписаны при помощи пары ключей, уникально идентифицирующей издателя сборки.
Взаимодействие кодом:
— управляемый код может вызывать направляемую функцию из DLL посредствам P/Invoke (например CreateSemaphore из Kernel32.dll).
— управл код может использ существующий COM-компонент (сервер).
— неуправляемый код может использовать управляемый тип (сервер). Можно реализовать COM — компоненты в управляемой среде и тогда не нужно вести подсчет ссылок интерфейсов.
Развертывание сборки может быть закрытым или глобальным. Сборку с закрытым развертыванием развертывают в базовом каталоге приложения или в одном из его подкаталогов. Для сборки с нестрогим именем возможно лишь закрытое развертывание. Сборку с глобальным развертыванием развертывают в каком-либо общеизвестном каталоге, который CLR проверяет при поиске сборок. Такие сборки можно развертывать как закрыто, так и глобально.
Сборка позволяет разделить логическое и физическое представления компонента, поддерживающего многократное использование, безопасность и управление версиями. Содержимое сборки описано в ее декларации. Модуль хранит код приложения или библиотеки, а также метаданные, описывающие этот код.