同一解决方案中的不同EntityFramework版本

Sha*_*awn 6 .net c# assemblies entity-framework

我有一个使用EF5的旧Silverlight应用程序,无法升级到EF6.我有另一个项目使用EF6与不同的上下文,但我得到:

无法加载文件或程序集'EntityFramework,Version = 6.0.0.0,Culture = neutral,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>
Run Code Online (Sandbox Code Playgroud)

到lgos建议后我的主web.config,但现在我收到:

{"[A] System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection无法强制转换为[B] System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection.类型A源自'EntityFramework,Version = 5.0.0.0,Culture =中性,PublicKeyToken = b77a5c561934e089'在上下文'默认'位置'C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\project211ef\_97babe28\e7ea3fa9\assembly\dl3\01275099\70646f08_d86ecf01\EntityFramework.dll'.类型B源自'EntityFramework,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089',位于'默认'位置'C:\ Projects\project\2.1.1EF2\packages\EntityFramework. 6.1.0\LIB \net45\EntityFramework.dll"."}

看起来它仍在尝试使用EF5,尽管它访问EF6实体部分.

我通过添加绑定重定向来修复此问题.在主要web.config我重定向到新版本然后在子web.config重定向到旧版本.

小智 5

通过在配置文件中定义程序集绑定,可以在同一应用程序中使用两个不同版本的程序集.我认为这个答案可以帮到你.