В поддержку ответа Дарина, конечно, вы должны устранить такие проблемы с несколькими версиями. Его решение использовать редирект связывания хорошее - +1 там. Я могу предложить решение, которое позволит вам сохранить оба, если это абсолютно необходимо, но вам придется написать немного кода.
Единственная реальная проблема, с которой вы здесь столкнулись, заключается в том, что два развернутых имени файла должны быть одинаковыми, чтобы загрузчик по умолчанию выбрал их. Вы могли бы ужасно обмануть и просто развернуть 5.8 dll как Conflict.exe
, чтобы он мог сидеть рядом Conflict.dll
(и новее), и вы обнаружите, что он работает.
Также, перейдя по ссылкам из ответа Дарина, вы попадаете на эту тему в теме MSDN о проверке . Основываясь на содержимом этого, вы можете просто развернуть dll 5.8 в bin \ Content \ Content.dll и, когда среда выполнения его ищет, он автоматически будет искать в этой подпапке.
Однако - это не очень хорошее решение:)
РЕДАКТИРОВАТЬ - НОВОЕ РЕШЕНИЕ
Если обе версии Conflict.dll уже подписаны, пытались ли вы на самом деле развернуть одну из версий с немного другим именем? Я только что настроил приложение winforms с двумя ссылками на разные версии одной и той же (подписанной) сборки. Это вызывает пару проблем со сборкой, потому что последняя версия, на которую ссылаются, будет развернута в папке bin, а другая - нет (поэтому вам придется вручную копировать в обе; переименовав одну из них соответственно). Затем я пытаюсь запустить приложение, которое отображает окно сообщения, содержащее две постоянные строки; по одному от каждой версии сборки. Работает абсолютно нормально.
Скачайте демонстрацию этого здесь - не собирайте его (в противном случае вам придется переименовать файл); просто откройте папку bin \ debug приложения формы и запустите exe.
ClassLibrary1.dll и ClassLibary1vanything.dll представляют собой v1.0.0.0 и v2.0.0.0 сборки с иным именем и открытым ключом. Несмотря на то, что classlibrary1vanything.dll имеет неправильное имя файла, он все еще работает (вероятно, потому что он подписан).
В app.config я вставил подсказку кодовой базы и подумал, что это сработало (изначально я развернул его под другим именем), но затем я закомментировал его, и оно все еще работало. Кодовая база, вероятно, наиболее полезна, когда сборка должна быть развернута в подпапке или в другом месте.
ОРИГИНАЛЬНЫЙ ТЕКСТ
Я пытался заставить работать второй из упомянутых вариантов в этой статье поддержки от MS , но, похоже, не хочет.
Нет никаких сомнений в том, что какой-то умный способ сделать это из коробки, но, поскольку я не достаточно умен, чтобы найти его (пока), я бы вместо этого украсил бы и использовал третий из вариантов, отображаемых в вышеупомянутой поддержке тему и подключитесь к событию AssemblyResolve
домена приложения.
Если вы добавите свою собственную конфигурацию (возможно, только в appSettings) для полного имени сборки, которая будет привязана к другому имени файла, то в вашем обработчике события AssemblyResolve вы можете просмотреть имя сборки, которая должна быть загружена чтобы увидеть, если это в вашей конфигурации. Если это так, возьмитесь за местоположение и используйте Assembly.LoadFrom для его загрузки.
Таким образом, если у вас есть что-то подобное, вы просто добавляете туда запись для имени сборки Conflict v5.8 вместе с именем файла, которое должно использовать приложение.
Я не знаю, какой тип приложения вы развертываете, но в win-формах, консольных приложениях и службах AppDomain.CurrentDomain.BaseDirectory
будет соответствовать папке bin, и вы можете присоединиться к ней с именем файла, который хотите загрузить , Сайты немного сложнее.
Должно работать угощение.