.NET Assembly Binding How / Why (1.1, 2.0, GAC, файлы политик и т. Д.)

Я работал над рядом очень "странных" проблем с некоторыми версиями DLL, файлами политик и элементами в GAC, и всю жизнь я не смог найти твердого ответа относительно того, как / почему. NET framework выбирает сборки, которые он делает, при привязке ссылок на проект.

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

ApplicationAssembly.dll - .NET 1.1 code - .dll Version 01.01.00.1234
ApplicationAssembly.dll - .NET 1.1 code - .dll Version 01.01.00.1244
ApplicationAssembly.dll - .NET 2.0 code - .dll Version 02.00.00.1111

Каждая из этих сборок загружается в GAC, и каждая из версий 1.1 и 2.0 имеет файл политики, в котором указана самая последняя версия для загрузки.

У нас есть проект, который ссылается на версию 1.1.00.1234 файла ApplicationAssembly.dll, однако проект был перемещен, и путь подсказки больше не действителен. Однако ссылка не мертва, но показывает версию 02.00.00.1111, а не предполагаемую версию сборки 1.1.

Как определяется этот процесс и почему он сразу перешел на фреймворк 2.0? Если мы укажем, что это ссылка на «Определенную версию», даже при неправильном пути к подсказке будет найдена правильная DLL, но из-за будущего риска поломки мы не можем оставить этот параметр включенным.

Я предполагаю, что вопрос в том, Почему это происходит? И как .NET определяет, куда идти за сборкой?


person Mitchel Sellers    schedule 28.01.2009    source источник


Ответы (1)


Правила, которые Fusion (функция управляемой загрузки dll в .Net) использует для поиска dll, довольно обширны (из-за Gac / строгих имен / пользовательских перехватчиков загрузки, и это лишь некоторые из них).

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

person ShuggyCoUk    schedule 28.01.2009
comment
Отличная ссылка! Я всю жизнь пытался, но так и не нашел той статьи! - person Mitchel Sellers; 29.01.2009
comment
знание того, что движок загрузки называется Fusion, очень помогает. - person ShuggyCoUk; 29.01.2009
comment
Каждый .NET-разработчик должен знать, как среда выполнения находит / загружает сборки, прежде чем им будет разрешено писать код :) - person Kev; 29.01.2009