Различные версии EntityFramework в одном решении

У меня есть старое приложение Silverlight, которое использует EF5 и не может быть обновлено до EF6. У меня есть еще один проект, использующий EF6 в другом контексте, но я получаю:

Не удалось загрузить файл или сборку EntityFramework, Version = 6.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089 или одну из их зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Я предполагаю, что это связано с тем, что EF5 уже загружен (он находится в основном проекте, не спрашивайте меня, почему), и он все еще указывает на этот dll вместо EF6. Как я могу заставить это работать?

Я добавил:

   <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <codeBase version="5.0.0.0" href="C:\Projects\project\2.1.1EF2\packages\EntityFramework.5.0.0\lib\net45\EntityFramework.dll"/>
        <codeBase version="6.0.0.0" href="C:\Projects\project\2.1.1EF2\packages\EntityFramework.6.1.0\lib\net45\EntityFramework.dll"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

в мой основной файл web.config после предложения lgos, но теперь я получаю:

{"[A] System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection нельзя преобразовать в [B] System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection. Тип A происходит из EntityFramework, Version = 5.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089 'в контексте' Default 'в расположении' C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ project211ef \ 97babe28 \ e7ea3fa9 \ assembly \ dl3 \ 01275099 \ 70646cf08_d86e EntityFramework.dll '. Тип B происходит от EntityFramework, Version = 6.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089 в контексте' Default 'в расположении' C: \ Projects \ project \ 2.1.1EF2 \ packages \ EntityFramework. 6.1.0 \ lib \ net45 \ EntityFramework.dll '. "}

Похоже, он все еще пытается использовать EF5, несмотря на доступ к разделу сущностей EF6.

Я исправил это, добавив перенаправления привязки. В основном web.config я перенаправляю на новую версию, а затем в подпрограмме web.config перенаправляю на старую версию.


person Shawn    schedule 27.05.2014    source источник
comment
Не могли бы вы подробнее остановиться на последнем предложении вашего сообщения? Я решил проблему с DLL, но я застрял на этой ошибке [A] не может быть преобразован в ошибку [B].   -  person Jake Wood    schedule 01.08.2016
comment
@JakeWood Это все теряет память, но iirc у меня был мой основной web.config с перенаправлением новой версии, а затем в папке, где находился мой проект silverlight, у меня был другой web.config с другим перенаправлением.   -  person Shawn    schedule 02.08.2016


Ответы (1)


Можно использовать две разные версии сборки в одних и тех же приложениях, указав привязку сборки в файле конфигурации. Я думаю, что это ответ должен вам помочь.

person Igos    schedule 27.05.2014