Обнаружение сборок в среде выполнения
Обновлен: Ноябрь 2007
Для успешного развертывания приложения .NET Framework следует понимать, как общеязыковая среда выполнения обнаруживает и связывает сборки, из которых состоит приложение. По умолчанию среда выполнения пытается выполнить привязку к той самой версии сборки, с которой было скомпоновано приложение. Это поведение по умолчанию может быть переопределено с помощью параметров файла конфигурации.
Процесс обнаружения сборки и разрешения ссылки сборки общеязыковая среда выполнения производит в несколько шагов. Разъяснение каждого из этих шагов приводится в следующих разделах. Термин "зондирование" обычно используется при описании того, как среда выполнения обнаруживает сборки; она ссылается на набор эвристических правил, используемых для обнаружения сборки, основываясь на ее имени и региональных параметрах.
Примечание. |
---|
Сведения привязки можно просмотреть в файле журнала, пользуясь Средством просмотра журнала привязки сборок (Fuslogvw.exe), которое содержится в SDK (пакет средств разработки программного обеспечения) для Windows. |
Инициирование привязки
Процесс обнаружения и связывания сборки начинается тогда, когда среда выполнения пытается разрешить ссылку в другую сборку. Эта ссылка может быть как статической, так и динамической. Компилятор записывает статические ссылки в метаданные манифеста сборки во время построения. Динамические ссылки создаются на лету в результате вызова различных методов, например System.Reflection.Assembly.Load.
Предпочтительным способом адресации сборки является использование полной ссылки, включающей ее имя, версию, язык и региональные параметры и маркер безопасности открытого ключа (если он имеется). Среда выполнения использует эти данные для обнаружения сборки, выполняя шаги, описываемые далее в этом разделе. Среда выполнения использует один и тот же процесс разрешения в имена, независимо от того, указывает ли ссылка на статическую или динамическую сборку.
Динамическая ссылка на сборку может быть также создана посредством вызова метода с частичными сведениями о сборке, например только с именем сборки. В этом случае поиск сборки осуществляется только в каталоге приложения, при этом другие проверки не производятся. Частичная ссылка создается с помощью любого из разнообразных методов загрузки сборок, например System.Reflection.Assembly.Load или System.AppDomain.Load.
В заключение можно создать динамическую ссылку, используя метод, такой как System.Reflection.Assembly.Load, и предоставить только частичные сведения; затем ссылку полностью определяют с помощью элемента <qualifyAssembly> в файле конфигурации приложения. Этот элемент позволяет предоставлять полные данные ссылки (имя, версию, язык и региональные параметры и, в случае наличия, маркер безопасности открытого ключа) в файле конфигурации приложения, а не в теле кода. Этот подход следует использовать, если необходимо полностью определить ссылку на сборку вне каталога приложения или если необходимо ссылаться на сборку в глобальном кэше сборок и хочется воспользоваться удобствами определения полной ссылки в файле конфигурации, а не в теле кода.
Примечание. |
---|
Частичные ссылки не должны применяться для сборок, которые используются совместно несколькими приложениями. Поскольку параметры конфигурации применяются к каждому приложению, а не к каждой сборке, для общей сборки, использующей такую частичную ссылку, потребуется, чтобы каждое приложение, использующее общую сборку, имело полные сведения в своем файле конфигурации. |
При разрешении ссылки сборки в имя среда выполнения производит следующие действия.
Определяет правильную версию сборки путем анализа применимых файлов конфигурации, включая файл конфигурации приложения, файл политики издателя и файл конфигурации компьютера. Если файл конфигурации находится на удаленно расположенном компьютере, среда выполнения должна сначала обнаружить и загрузить файл конфигурации приложения.
Проверяет, выполнялась ли привязка имени сборки прежде и если выполнялась, использует ранее загруженную сборку. Если предыдущий запрос загрузки сборки закончился неудачей, запрос немедленно прерывается без попытки загрузить сборку.
Примечание. Кэширование сбоев привязки сборок введено впервые в .NET Framework версии 2.0.
Проверяет глобальный кэш сборок. Если в кэше обнаруживается сборка, среда выполнения использует найденную сборку.
Зондирует наличие сборки, выполняя следующие шаги:
Если конфигурация и политика издателя не влияют на исходную ссылку, и если запрос привязки был создан с помощью метода Assembly.LoadFrom, среда выполнения проверяет подсказки о местоположении.
Если база кода находится в файлах конфигураций, среда выполнения проверяет только это местоположение. Если происходит сбой зондирования, среда выполнения определяет, что запрос привязки не выполнен, и дальнейшего зондирования не осуществляется.
Проверки наличия сборки с помощью эвристических правил описаны в разделе зондирования. Если сборка не найдена после зондирования, среда выполнения запрашивает предоставление сборки у установщика Windows. Эта операция действует как функция установки по запросу.
Примечание. Если сборки не являются сборками со строгими именами, для них не проводятся ни проверка версии, ни поиск в глобальном кэше сборок.
См. также
Основные понятия
Сценарии развертывания приложений .NET Framework
Шаг 1. Проверка файлов конфигурации
Шаг 2. Проверка наличия ранее связанных сборок
Шаг 3. Проверка глобального кэша сборок
Шаг 4. Обнаружение сборки с помощью базы кода или проверки