Невозможно загрузить две версии одной и той же библиотеки в ASP.NET MVC

#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 содержит две библиотеки:

папка bin

Но когда я запускаю проект, он показывает ошибку, которая показывает, что невозможно найти библиотеку:

ошибка

Почему он не может загрузить библиотеку, если она находится в нужном месте?

Спасибо!

Комментарии:

1. Я бы посоветовался с Telerik и посмотрел, сможете ли вы это сделать. «Только одна версия библиотеки» может быть «по дизайну».

2. Хорошо, спасибо, я попрошу сотрудников Telerik!

3. Обратите внимание, что в сообщении об ошибке не говорится, что не удается найти библиотеку, в нем говорится, что ИМЯ не совпадает, предпоследняя строка

4. Привет, @camilo-terevinto, ты прав, возможно, это свойство «Name» происходит от sign certificate, и оно пытается сопоставить имя файла с этим свойством. Я спросил Telerik и все еще жду ответа… Я буду публиковать здесь любые новости

5. Наконец, проблема заключалась в StrongName двоичного файла, после удаления его с помощью reflectil проблема была решена.

Ответ №1:

Наконец, после нескольких часов исследований я получил ответ в этом сообщении, и он работает как шарм !.

Проблема заключалась в том, что подписанные сборки с «Строгим именем» защищают его от каких-либо изменений, между ними, переименования файлов.

Я смог использовать ReflexIL для переименования сборки, удалив «Строгое имя» и вуаля.