Я работал над множеством очень «странных» проблем с некоторыми версиями 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 имеет файл политики, определяющий самую последнюю версию для загрузки.
У нас есть проект, который ссылается на версию файла ApplicationAssembly.dll версии 1.1.00.1234, однако проект был перемещен, и путь к подсказке больше не действителен. Тем не менее, ссылка не является мертвой, а показывает версию 02.00.00.1111, а не предполагаемую версию 1.1 сборки.
Как определяется этот процесс, и почему он сразу же перешел на платформу 2.0? Если мы укажем, что это ссылка «Конкретная версия», даже при неправильном пути подсказки будет найдена правильная DLL, но из-за будущего риска поломки мы не сможем оставить этот параметр включенным.
Полагаю, вопрос Почему это происходит? И как .NET определяет, куда идти для сборки?