#c# #asp.net #asp.net-mvc #kendo-asp.net-mvc
#c# #asp.net #asp.net-mvc #kendo-asp.net-mvc
Вопрос:
Мы используем библиотеку Telerik kendo, которая позволяет нам использовать расширенные виджеты пользовательского интерфейса в нашем ASP.NET Проект MVC. На прошлой неделе мне предложили обновить библиотеку, но мы подумали, что мы можем дважды связать одну и ту же библиотеку, пытаясь обновить библиотеку в некоторых представлениях и выполнить миграцию по времени.
Но моя попытка не удалась.
Я зарегистрировал две версии библиотеки Telerik kendo, имя сборки и библиотеки которой — Kendo.Mvc в csproj, чтобы сделать это, я переименовал обе библиотеки и ссылался на проект, используя следующий блок кода. Кроме того, я создаю псевдонимы для ссылки на каждую версию библиотеки, используя «внешние псевдонимы»:
<Reference Include="Kendo.Mvc.2020, Version=2020.3.1021.545, Culture=neutral, PublicKeyToken=121FAE78165BA3D4">
<SpecificVersion>False</SpecificVersion>
<HintPath>..vendorKendo.Mvc.2020.dll</HintPath>
<Aliases>Kendo_2020</Aliases>
<Private>True</Private>
</Reference>
<Reference Include="Kendo.Mvc.2016, Version=2016.3.1118.545, Culture=neutral, PublicKeyToken=29AC1A93EC063D92">
<SpecificVersion>False</SpecificVersion>
<HintPath>..vendorKendo.Mvc.2016.dll</HintPath>
<Aliases>Kendo_2016</Aliases>
<Private>True</Private>
</Reference>
После этого я изменяю кодовую базу в web.config, чтобы показать, где находится соответствующая версия библиотеки:
<dependentAssembly>
<assemblyIdentity name="Kendo.Mvc" publicKeyToken="29AC1A93EC063D92" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2016.3.1118.545" newVersion="2016.3.1118.545" />
<codeBase version="2016.3.1118.545" href="Kendo.Mvc.2016.dll"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Kendo.Mvc" publicKeyToken="121FAE78165BA3D4" culture="neutral" />
<bindingRedirect oldVersion="2016.3.1118.546-2020.3.1021.545" newVersion="2020.3.1021.545" />
<codeBase version="2020.3.1021.545" href="Kendo.Mvc.2020.dll"/>
</dependentAssembly>
Затем я попытался использовать каждую версию библиотеки, используя внешние ссылки, например:
extern alias Kendo_2016;
using Kendo_2016.Kendo.Mvc.Extensions;
using Kendo_2016.Kendo.Mvc.UI;
...
Папка bin содержит две библиотеки:
Но когда я запускаю проект, он показывает ошибку, которая показывает, что невозможно найти библиотеку:
Почему он не может загрузить библиотеку, если она находится в нужном месте?
Спасибо!
Комментарии:
1. Я бы посоветовался с Telerik и посмотрел, сможете ли вы это сделать. «Только одна версия библиотеки» может быть «по дизайну».
2. Хорошо, спасибо, я попрошу сотрудников Telerik!
3. Обратите внимание, что в сообщении об ошибке не говорится, что не удается найти библиотеку, в нем говорится, что ИМЯ не совпадает, предпоследняя строка
4. Привет, @camilo-terevinto, ты прав, возможно, это свойство «Name» происходит от sign certificate, и оно пытается сопоставить имя файла с этим свойством. Я спросил Telerik и все еще жду ответа… Я буду публиковать здесь любые новости
5. Наконец, проблема заключалась в StrongName двоичного файла, после удаления его с помощью reflectil проблема была решена.
Ответ №1:
Наконец, после нескольких часов исследований я получил ответ в этом сообщении, и он работает как шарм !.
Проблема заключалась в том, что подписанные сборки с «Строгим именем» защищают его от каких-либо изменений, между ними, переименования файлов.
Я смог использовать ReflexIL для переименования сборки, удалив «Строгое имя» и вуаля.