Using multiple versions of Entity framework by different projects within the same solution.
I had to develop a pilot project to use Entity framework (EF) 6.0 inside the solution that already has other projects that refers to EF 4.4.
While debugging I received this error:
Could not load file or assembly ‘EntityFramework, Version=18.104.22.168, Culture=neutral, PublicKeyToken=b77a5c561934e089’ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
This can be solved by adding following configuration to the web.config file.
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-22.214.171.124" newVersion="126.96.36.199" /> <codeBase version="188.8.131.52" href="binef44EntityFramework.dll"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> <bindingRedirect oldVersion="184.108.40.206-220.127.116.11" newVersion="18.104.22.168" /> </dependentAssembly> </assemblyBinding> </runtime>
The Dependent Assembly entries inform the Run Time to use version for 22.214.171.124 for any project that require a version between 0.0.0.0 to 126.96.36.199 and use the version 188.8.131.52 for any project that require EF between 184.108.40.206 to 220.127.116.11.
The code base entry under the first dependent assembly advises the run time to locate the 18.104.22.168 version of entity framework (EntityFramework.dll) under binef44 folder.
The other version of EntityFramework.dll will be located in the usual bin folder.
Note: this article explains how you can find the publicKeyToken for any dll file or assembly.