Частичные ссылки на сборки
Полная ссылка на сборку включает в себя текстовое имя сборки, версию, язык и региональные параметры и маркер открытого ключа (если сборка имеет строгое имя). Полная ссылка на сборку требуется, если необходимо сослаться на какую-либо сборку, являющуюся частью общеязыковой среды выполнения, или на сборку, расположенную в глобальном кэше сборок. Можно также ссылаться на сборки динамически, предоставляя только часть сведений, например задавая только имя сборки.
Применение частичных ссылок на сборки не рекомендуется, поскольку это может привести к ряду проблем с системой управления версиями:
Версии сборки могут не обладать обратной совместимостью. Например, программный код может работать с версией 1.6 сборки, но из-за частичной ссылки на сборку может быть получена более поздняя версия, имеющая несовместимое изменение.
Версии сборок могут не обладать совместимостью снизу вверх. Например, программный код может работать с версией 1.6 сборки, но из-за частичной ссылки на сборку может быть получена более ранняя версия, не имеющая необходимого кода.
Приложение, устанавливающее новую версию сборки, может прерывать приложения, использующие частичные ссылки на сборки для загрузки сборок, если новая версия не обладает совместимостью.
Так как возможность возникновения проблем с системой управления версиями настолько велика, метод LoadWithPartialName помечается как устаревший в .NET Framework версии 2.0.
Выполнение частичных ссылок на сборки
Частичные ссылки на сборки могут осуществляться внутри кода одним из следующих способов.
Используйте метод, такой как System.Reflection.Assembly.Load, и укажите только частичную ссылку. Среда выполнения проверяет наличие сборки в каталоге приложения.
Используйте метод System.Reflection.Assembly.LoadWithPartialName и укажите только частичную ссылку. Среда выполнения проверяет наличие сборки в каталоге приложения и в глобальном кэше сборок.
Примечание |
---|
В .NET Framework версии 2.0 метод LoadWithPartialName считается устаревшим. |
Использованию метода LoadWithPartialName присуща изменчивость в процессе привязки. Например, если запрашивается привязка к сборке со строгим именем, и в ссылке не задан открытый ключ, отсутствует уверенность, что сборка, к которой осуществляется привязка, поступила от ожидаемого издателя. Кроме того, на ссылки, не содержащие маркер открытого ключа, не действует политика контроля версий, поэтому файл конфигурации компьютера и файл конфигурации приложения никогда не проверяются. Частичные ссылки, использующие метод LoadWithPartialName, оптимально работают в сценариях, когда требуется получить последнюю версию сборки.
- Используйте метод System.Reflection.Assembly.Load и предоставьте только частичную ссылку; затем предоставьте полные данные ссылки в файле конфигурации приложения.
Частичные ссылки, использующие метод LoadWithPartialName
Примечание |
---|
В .NET Framework версии 2.0 метод LoadWithPartialName считается устаревшим. |
Вызов метода LoadWithPartialName должен включать по крайней мере текстовое имя сборки, но может также включать маркер открытого ключа, версию или язык. Поскольку используется метод, ожидающий только частичную ссылку, не обязательно включать полные сведения ссылки (имя, версию, язык и маркер открытого ключа, если он применяется).
При частичной ссылке на сборку с помощью метода LoadWithPartialName среда выполнения использует определенные правила для обнаружения сборки, на которую осуществляется ссылка. Это следующие правила:
Средой выполнения проверяется файл конфигурации приложения на наличие полных сведений ссылки в элементе <qualifyAssembly>. Если найдена подходящая запись, процесс привязки выполняется так же, как в случае полной ссылки.
Затем среда выполнения ищет в каталоге приложения сборку по заданному текстовому имени. Если соответствие имени обнаружено, среда выполнения использует найденную сборку.
Если соответствия не найдено в каталоге приложения, среда выполнения ищет сборку в глобальном кэше сборок. Если в частичной ссылке заданы маркер открытого ключа, версия или язык, среда выполнения пытается найти полное соответствие этому значению. Если версия не указана, среда выполнения пытается обнаружить новейшую версию сборки, которая соответствует другим заданным критериям. Если язык или маркер открытого ключа не заданы, поведение среды выполнения не определено.
Например, предположим, что осуществлен вызов Assembly.LoadWithPartialName("math, Version 5.0.0.0"), и глобальный кэш сборок имеет следующее содержимое:
math,version=5.0.0.0,publicKeyToken=11111111,culture=de math,version=5.0.0.0,publicKeyToken=22222222,culture=en
Результат вызова не определен. Среда выполнения выбирает первую встреченную сборку.
В другом примере предположим, что сделан вызов Assembly.LoadWithPartialName("math"), и глобальный кэш сборок имеет следующее содержимое:
math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
Результат вызова — привязка к сборке math версии 6.0.0.0.
В качестве заключительного примера предположим, что сделан вызов Assembly.LoadWithPartialName("math,publicKeyToken=11111111"), и глобальный кэш сборок имеет следующее содержимое:
math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
Результат вызова — привязка к сборке math версии 5.0.0.0.
Частичные ссылки с полными сведениями
Можно также выполнять динамические ссылки, пользуясь методом, таким как System.Reflection.Assembly.Load, и предоставлять только частичную ссылку, а затем полностью определять ссылку, используя элемент <qualifyAssembly> в файле конфигурации приложения. Этот элемент позволяет предоставлять полные данные ссылки (имя, версию, язык и региональные параметры, а также маркер безопасности открытого ключа, если он применяется) в файле конфигурации приложения, а не в теле кода.
Примечание |
---|
Частичные ссылки этого типа не должны применяться для сборок, которые используются совместно несколькими приложениями.Поскольку параметры конфигурации применяются по приложениям, а не по сборкам, для общей сборки, использующей частичную ссылку такого типа, потребуется, чтобы каждое приложение, в котором применяется общая сборка, имело полные сведения в своем файле конфигурации. |
См. также
Основные понятия
Обнаружение сборок в среде выполнения
Шаг 1. Проверка файлов конфигурации
Шаг 2. Проверка наличия ранее связанных сборок