Я работал над рядом очень "странных" проблем с некоторыми версиями 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 определяет, куда идти за сборкой?