Общие сведения о размещении

Приложения платформы .NET Framework автоматически размещают в себе среду CLR, для которой они были построены. При компилировании управляемого кода как сборки EXE среда выполнения запускается автоматически mscoree.dll при выполнении файла EXE. Неуправляемые приложения также могут использовать преимущества размещения среды CLR. Среда выполнения предоставляет платформу для расширения приложений, таких как службы IIS и SQL Server 2005.

Независимо от того, вызывается ли приложение автоматически, как в случае с управляемыми сборками EXE, или загружается с помощью неуправляемого хост-интерфейса API, это приложение .NET Framework нуждается во фрагменте кода, который называется хост-приложение среды выполнения. Хост-приложение загружает среду выполнения в процесс, создает в процессе домены приложения и выполняет пользовательский код в этих доменах приложения.

Платформа .NET Framework версии 2.0 позволяет приложениям, в которых размещается среда CLR, управлять многими функциями этой среды. Можно заменять некоторые функции, например выделение памяти и загрузку сборок, пользовательскими реализациями. Можно контролировать режим работы других функций, получать уведомления о событиях в среде выполнения и управлять доменами приложений.

Платформа .NET Framework 4 объединяет многие API размещения версии 2.0. Кроме того, платформа .NET Framework 4 поддерживает внутрипроцессную параллельную активацию хост-приложения среды выполнения и предоставляет другие улучшения.

Обзор включает следующие разделы.

  • Инициализация и запуск размещенной среды

  • Интерфейсы управления размещением платформы .NET Framework версии 2.0

  • Интерфейсы управления размещением платформы .NET Framework версии 4

  • Диспетчеры доменов приложений

  • Связанные разделы

  • Ссылки

Инициализация и запуск размещенной среды выполнения

API размещения платформы .NET Framework 4 предоставляет функцию CLRCreateInstance, которая может возвращать интерфейс ICLRMetaHost. Затем можно вызвать метод GetRuntime для этого интерфейса и получить конкретный интерфейс ICLRRuntimeInfo, указав определенную версию среды CLR. Эта процедура заменяет метод CorBindToRuntimeEx, используемый в API размещения платформы .NET Framework 2.0.

API размещения платформы .NET Framework версии 2.0 предоставляет функцию CorBindToRuntimeEx для инициализации среды выполнения. Можно выбрать загружаемую версию среды выполнения, но в процессе может размещаться только одна версия. Если загружена версия 2.0, 3.0 или 3.5, эта функция возвращает интерфейс ICLRRuntimeHost, который используется для запуска среды выполнения и выполнения управляемого кода.

API размещения платформы .NET Framework версии 1 предоставляет интерфейс ICorRuntimeHost.

Запуск среды выполнение описывается в разделе Загрузка среды CLR в процесс, а выполнение управляемого кода — в разделе Переход к управляемому коду размещения.

К началу

Интерфейсы управления размещением платформы .NET Framework 2.0

Среда CLR в платформе .NET Framework 2.0 предоставляет интерфейсы управления размещением для управления многими функциями размещаемой среды, позволяет ведущему приложению реализовать другие интерфейсы управления, предоставляемые средой, а также дает возможность реализовать пользовательские интерфейсы управления размещением.

По типу обнаружения интерфейсы управления разделяются на две основные категории:

  • интерфейсы управления, реализуемые ведущим приложением, которые обнаруживаются средой выполнения по интерфейсу IHostControl;

  • интерфейсы управления, предоставляемые средой CLR, которые обнаруживаются ведущим приложением по интерфейсу ICLRControl.

В следующей таблице интерфейсы сгруппированы по типу предоставляемых ими функций. Самый важный интерфейс в каждой группе указан первым.

Группа

Функция

Интерфейсы

Управление загрузкой сборок

Позволяет ведущему приложению изменять источники, из которых загружаются сборки, способ контроля версий и форматы, из которых возможна загрузка сборок. Например, можно загружать сборки из базы данных, а не из файлов на жестком диске.

Среда CLR с помощью интерфейса IHostControl определяет, реализована ли в ведущем приложении данная группа интерфейсов.

IHostAssemblyManager

IHostAssemblyStore

ICLRAssemblyReferenceList

ICLRAssemblyIdentityManager

Управление политиками

Позволяет ведущему приложению указать способ обработки программных сбоев, чтобы обеспечить различные требования к надежности работы.

Ведущее приложение получает доступ к диспетчеру среды по интерфейсу ICLRControl и реализует обратные вызовы IHostPolicyManager, чтобы передавать уведомления о сбоях из среды выполнения.

ICLRPolicyManager

IHostPolicyManager

Управление защитой ведущего приложения

Позволяет применять в ведущем приложении собственную модель программирования, запрещая использование элементов указанных типов. Например, можно запретить использование в ведущем приложении примитивов для потоковой работы или синхронизации.

Ведущее приложение получает доступ к диспетчеру среды выполнения по интерфейсу ICLRControl.

ICLRHostProtectionManager

Управление памятью

Позволяет ведущему приложению управлять выделением памяти, предоставляя функции, заменяющие функции операционной системы, которые используются средой CLR для выделения памяти.

Среда CLR с помощью интерфейса IHostControl определяет, реализована ли в ведущем приложении данная группа интерфейсов.

IHostMemoryManager

IHostMAlloc

ICLRMemoryNotificationCallback

Управление сборкой мусора

Позволяет реализовать в ведущем приложении методы для получения уведомлений о начале и окончании сборки мусора. Дает ведущему приложению возможность запускать сбор, собирать статистические данные и задавать некоторые характеристики сбора.

Ведущее приложение получает доступ к диспетчеру среды выполнения по интерфейсу ICLRControl. Среда CLR с помощью интерфейса IHostControl определяет, реализована ли в ведущем приложении данная группа интерфейсов.

IHostGCManager

ICLRGCManager

Управление отладкой

Позволяет ведущему приложению определять, подключен ли отладчик, чтобы передавать дополнительную отладочную информацию и настраивать задачи отладки.

Ведущее приложение получает доступ к диспетчеру среды выполнения по интерфейсу ICLRControl.

ICLRDebugManager

Управление событиями среды CLR

Позволяет зарегистрировать ведущее приложение для получения уведомлений о событиях, содержащихся в перечислении EClrEvent.

Ведущее приложение получает доступ к диспетчеру среды по интерфейсу ICLRControl и реализует обработчики событий с помощью интерфейса IActionOnCLREvent.

ICLROnEventManager

IActionOnCLREvent

Управление задачами

Позволяет ведущему приложению получать уведомления, когда поток выполняет переход между управляемым и неуправляемым кодом. Дает ведущему приложению возможность управлять распределением и планированием потоков во время запуска и остановки задач.

Среда CLR с помощью интерфейса IHostControl определяет, реализована ли в ведущем приложении данная группа интерфейсов.

IHostTaskManager

ICLRTaskManager

IHostTask

ICLRTask

Управление пулом потоков

Позволяет ведущему приложению реализовать собственный пул потоков, используемый средой выполнения.

Среда CLR с помощью интерфейса IHostControl определяет, реализована ли в ведущем приложении данная группа интерфейсов.

IHostThreadPoolManager

Управление синхронизацией

Позволяет ведущему приложению реализовать собственные примитивы синхронизации, используемые средой выполнения. Ведущее приложение может предоставлять события, критические секции и семафоры.

Среда CLR с помощью интерфейса IHostControl определяет, реализована ли в ведущем приложении данная группа интерфейсов.

IHostSyncManager

ICLRSyncManager

IHostCrst

IHostManualEvent

IHostAutoEvent

IHostSemaphore

Управление завершением ввода-вывода

Позволяет ведущему приложению реализовать собственные операции асинхронного ввода-вывода.

Среда CLR с помощью интерфейса IHostControl определяет, реализована ли в ведущем приложении данная группа интерфейсов.

IHostIoCompletionManager

ПримечаниеПримечание

Интерфейсы размещений для предыдущих версий среды выполнения описаны в разделе Интерфейсы размещения платформ .NET Framework 1.0 и 1.1.

К началу

Интерфейсы управления размещением .NET Framework 4

Платформа .NET Framework 4 объединяет API размещения версии 2.0 в следующих интерфейсах.

  • ICLRMetaHost предоставляет методы, возвращающие определенную версию среды CLR на основе номера ее версии, перечисляющие все установленные среды CLR, перечисляющие все внутрипроцессные среды выполнения, возвращающие интерфейс активации и определяющие версию среды CLR, использованную для компиляции сборки.

  • ICLRMetaHostPolicy предоставляет метод GetRequestedRuntime, который предоставляет предпочтительный интерфейс среды CLR на основе критериев политики, управляемой сборки, версии и файла конфигурации.

  • ICLRRuntimeInfo предоставляет методы, возвращающие сведения о конкретной среде выполнения, включая версию, каталог и состояние загрузки.

  • ICLRStrongName объединяет в один интерфейс все глобальные статические функции строгих имен среды CLR версии 2.0, экспортированные библиотекой MSCorEE.dll (кроме StrongNameErrorInfo). Все методы ICLRStrongName возвращают стандартные результаты COM HRESULT.

Эти интерфейсы инкапсулируют и заменяют интерфейсы размещения .NET Framework 2.0.

К началу

Диспетчеры доменов приложений

Домены приложений обеспечивают повышенную надежность программ, в которых размещается среда CLR, за счет изоляции сборок. Сборки можно выгрузить из процесса, выгрузив все домены приложений.

Для работы с несколькими доменами приложений платформа .NET Framework предоставляет класс AppDomainManager, который можно использовать в качестве базового для создания собственных диспетчеров доменов приложений. Диспетчер домена приложений, разрабатываемый для ведущего приложения, фактически является расширением этого приложения в управляемом коде. Он автоматически загружается в каждый домен приложения, создаваемый в процессе.

Использование диспетчера доменов приложений может повысить производительность, исключив некоторые переходы между управляемым и неуправляемым кодом. Он может получать уведомления о создании новых доменов приложений и давать возможность выполнить их настройку. Диспетчер домена приложения также предоставляет неуправляемому ведущему приложению способ вызова управляемого кода.

К началу

Связанные разделы

Заголовок

Описание

Загрузка среды CLR в процесс

Описано, как загрузить среду выполнения в процесс, инициализировать ее и задать значения для указания ее поведения.

Выгрузка доменов и завершение процесса

Описаны процедуры выгрузки доменов приложений и завершения процесса.

Задание политики безопасности, основанной на ролях и участниках

Описан способ задания политики безопасности, основанной на ролях.

Задание политики безопасности на уровне домена приложения

Описан способ задания политики безопасности на уровне домена приложения.

Загрузка и выполнение пользовательского кода

Описан способ загрузки и исполнения пользовательского кода.

Создание и настройка доменов приложений

Описаны способы создания и настройки доменов приложений, в которых выполняется код пользователя.

Определение границ домена приложения

Описан способ определения границ нового домена приложения.

Переход к управляемому коду размещения

Описано, как выполнить переход от неуправляемого кода к выполнению управляемого кода размещения и пользовательского кода.

Файлы конфигурации активации

Описывает, как активировать версию среды выполнения, отличную от той, что задана в файле конфигурации приложения.

Узлы среды выполнения

Описание узлов, включенных в платформу .NET Framework.

Домены приложений

Описаны конструкции, используемые основными приложениями для изоляции кода, работающего в процессе.

Параллельное выполнение

Описана работа нескольких версий приложения, компонента или среды выполнения.

Интерфейсы размещения платформы .NET Framework 4

Описание неуправляемых интерфейсов для размещения среды выполнения в платформе .NET Framework версии 4.

Интерфейсы размещения платформы .NET Framework 2.0

Описание неуправляемых интерфейсов для размещения среды выполнения в платформе .NET Framework версии 2.0.

К началу

Ссылки

System.AppDomainManager

К началу