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

时间:2014-05-27 17:47:46

标签: c# .net entity-framework assemblies

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

  

无法加载文件或程序集' EntityFramework,Version = 6.0.0.0,   Culture = neutral,PublicKeyToken = b77a5c561934e089'或其中一个   依赖。定位程序集的清单定义没有   匹配程序集引用。 (HRESULT异常:0x80131040)

我假设这是因为EF5已经加载了(它在主项目中,不要问我原因)并且它仍然指向{{1}而不是EF6。我怎样才能让它发挥作用?

我补充说:

dll

到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 = neutral,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实体部分。

我通过添加绑定重定向来修复此问题。在主 <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中重定向到旧版本。

1 个答案:

答案 0 :(得分:5)

通过在配置文件中定义程序集绑定,可以在相同的应用程序中使用两个不同版本的程序集。我认为这answer可以帮助你。