Как я могу ссылаться на DLL независимо от версии?
Хорошо, я являюсь тяжелым пользователем библиотеки элементов управления Telerik, особенно для ASP.NET. Однако есть небольшая функциональность, которую я хотел бы добавить к некоторым элементам управления. В настоящее время я могу сделать это достаточно легко, используя методы расширения. Поэтому я написал небольшую библиотеку, которая делает именно это. Очевидно, что эта библиотека должна ссылаться на свою DLL (Telerik.Web.UI.dll
).
На странице My Project > References
моего DLL-проекта у меня есть ссылка на Telerik.Web.UI.dll
. Для этой ссылки у меня есть свойство Конкретная версия, установленное на False, потому что я не хочу, чтобы моя библиотека заботилась о том, какая версия DLL Telerik используется. Это моя проблема, хотя... компилятор .NET, похоже, не соблюдает эту настройку.
Дело в том, что у меня есть сайт, который ссылается как на DLL Telerik, так и на мой. Я обновил библиотеку Telerik до последней версии. Теперь, когда я пытаюсь запустить свой сайт, я получаю:
Could not load file or assembly 'Telerik.Web.UI, Version=2012.1.215.40, Culture=neutral, PublicKeyToken=121fae78165ba3d4' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Я исправляю это, перейдя в мой проект DLL, перекомпилируя его с последней DLL Telerik, а затем обновляя свою DLL на веб-сайте. Это то, чего я не хотел делать каждый раз, когда я обновляю библиотеку Telerik. Я думал, что установка Конкретная версия на false означает, что она будет работать с любой версией. Нет? Или я полностью не понимаю, что делает эта настройка?
Ответы
Ответ 1
Вы должны изучить bindingRedirect
, который позволит вам проинструктировать платформу .NET использовать другую версию сборки в время исполнения (т.е. если ваш проект был скомпилирован против версии 1.0, он все равно будет работать с версией 1.1, если не будет изменений API).
Атрибут Specific Version
применяется только к ссылке сборки компиляции.