Обнаружение сборок в среде выполнения
Для успешного развертывания приложения .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. Эта операция действует как функция установки по запросу.
Примечание Если сборки не являются сборками со строгими именами, для них не проводятся ни проверка версии, ни поиск в глобальном кэше сборок.
См. также
Основные понятия
Шаг 1. Проверка файлов конфигурации
Шаг 2. Проверка наличия ранее связанных сборок
Шаг 3. Проверка глобального кэша сборок