Обнаружение сборок в среде выполнения

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

Процесс обнаружения сборки и разрешения ссылки сборки общеязыковая среда выполнения производит в несколько шагов. Разъяснение каждого из этих шагов приводится в следующих разделах. Термин "зондирование" обычно используется при описании того, как среда выполнения обнаруживает сборки; она ссылается на набор эвристических правил, используемых для обнаружения сборки, основываясь на ее имени и региональных параметрах.

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

Сведения привязки можно просмотреть в файле журнала, пользуясь Средством просмотра журнала привязки сборок (Fuslogvw.exe), которое содержится в Пакет средств разработки программного обеспечения (SDK) для Windows.

Инициирование привязки

Процесс обнаружения и связывания сборки начинается тогда, когда среда выполнения пытается разрешить ссылку в другую сборку. Эта ссылка может быть как статической, так и динамической. Компилятор записывает статические ссылки в метаданные манифеста сборки во время построения. Динамические ссылки создаются на лету в результате вызова различных методов, например System.Reflection.Assembly.Load.

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

Динамическая ссылка на сборку может быть также создана посредством вызова метода с частичными сведениями о сборке, например только с именем сборки. В этом случае поиск сборки осуществляется только в каталоге приложения, при этом другие проверки не производятся. Частичная ссылка создается с помощью любого из разнообразных методов загрузки сборок, например System.Reflection.Assembly.Load или System.AppDomain.Load.

В заключение можно создать динамическую ссылку, используя метод, такой как System.Reflection.Assembly.Load, и предоставить только частичные сведения; затем ссылку полностью определяют с помощью элемента <qualifyAssembly> в файле конфигурации приложения. Этот элемент позволяет предоставлять полные данные ссылки (имя, версию, язык и региональные параметры и, в случае наличия, маркер безопасности открытого ключа) в файле конфигурации приложения, а не в теле кода. Этот подход следует использовать, если необходимо полностью определить ссылку на сборку вне каталога приложения или если необходимо ссылаться на сборку в глобальном кэше сборок и хочется воспользоваться удобствами определения полной ссылки в файле конфигурации, а не в теле кода.

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

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

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

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

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

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

    Кэширование сбоев привязки сборок введено впервые в .NET Framework версии 2.0.

  3. Проверяет глобальный кэш сборок. Если в кэше обнаруживается сборка, среда выполнения использует найденную сборку.

  4. Зондирует наличие сборки, выполняя следующие шаги:

    1. Если конфигурация и политика издателя не влияют на исходную ссылку, и если запрос привязки был создан с помощью метода Assembly.LoadFrom, среда выполнения проверяет подсказки о местоположении.

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

    3. Проверки наличия сборки с помощью эвристических правил описаны в разделе зондирования. Если сборка не найдена после зондирования, среда выполнения запрашивает предоставление сборки у установщика Windows. Эта операция действует как функция установки по запросу.

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

      Если сборки не являются сборками со строгими именами, для них не проводятся ни проверка версии, ни поиск в глобальном кэше сборок.

См. также

Основные понятия

Шаг 1. Проверка файлов конфигурации

Шаг 2. Проверка наличия ранее связанных сборок

Шаг 3. Проверка глобального кэша сборок

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

Частичные ссылки на сборки

Развертывание .NET Framework и приложений