Не удалось загрузить файл или сборку "EntityFramework" после переопределения EF 5.0.0.0 → 4.3.1.0
После слишком быстрого перехода на EF 5.0.0.0 RC и застрявшего с проектом .NET 4.5, который не будет использоваться для Windows Azure (.NET 4.0 и ниже), я решил перейти на EF 4.3.1.0.
Я не уверен в наилучшем способе выполнения этого типа миграции, но моя стратегия заключается в использовании "Manage NuGet Packages", который определяет, какие проекты ссылаются на пакет, снимите пакет с каждого проекта, установите замену и перепроверьте правильные проекты.
К сожалению, после этого мое решение создало титульный "FileLoadException".
Could not load file or assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly
manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Я искал файлы решений, особенно packages.config для ссылок на EF 5.0.0.0 RC, но не смог найти их.
Ответы
Ответ 1
После неудачных попыток найти ссылки на EntityFramework в repositories.config и в других местах, я наткнулся на ссылку в Web.config, поскольку я редактировал ее, чтобы помочь с моим диагнозом.
СвязываниеRedirect с ссылкой 5.0.0.0, которое больше не было установлено, и это, по-видимому, является источником исключения. Честно говоря, я не добавлял эту ссылку в Web.config и, пытаясь продублировать ошибку в отдельном проекте, обнаружил, что она не добавлена установщиком пакетов NuGet, поэтому я не знаю, почему она была там, но что-то добавленное он.
<dependentAssembly>
<assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
Я решил заменить это эквивалентным элементом из рабочего проекта. NB ссылки на 5.0.0.0 заменяются на 4.3.1.0 следующим образом:
<dependentAssembly>
<assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
</dependentAssembly>
Это сработало!
Затем я решил полностью удалить зависимую сборку для EntityFramework.
Он по-прежнему работает!
Итак, я публикую это здесь как вопрос, ответивший на вопрос, в надежде, что он поможет кому-то другому. Если кто-нибудь может мне объяснить:
- Что добавило зависимую сборку для EntityFramework к моему Web.config
- Любые последствия удаления этих ссылок
Мне было бы интересно узнать.
Ответ 2
У меня есть эта проблема, и все, что я сделал, это убедиться, что я ссылаюсь на правильную инфраструктуру .Net во всех проектах, а затем просто изменим web.config из
Из
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
To
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework" requirePermission="false"/>
Все работает..
Ответ 3
У меня была такая же проблема при обновлении старого проекта. Вот что я сделал, чтобы решить эту проблему:
- Преобразование всех проектов в .NET 4.5.
- Удален пакет NuGet для Entity Framework 5.
- Переустановил пакет NuGet для платформы Entity Framework 5.
- Убрано решение.
- Восстановлено решение.
В проектах, которые использовали Entity Framework 5 и .NET 4, была установлена версия 4.4 библиотеки Entity Framework. Как только я переключил версию .NET на 4.5 в проект, версия dll будет равна 5.
Моя проблема возникла из старых проектов на .NET 4 и более нового проекта под управлением .NET 4.5, поэтому в моем решении было 2 версии DLL.
Надеюсь, это поможет кому-то...
Ответ 4
При построении проекта, если в свойствах проекта он показывает, что он создается под Target.NET Framework 4.5, обновите его до 4.6 или 4.6.1. Затем сборка сможет найти Entity Framework 6.0 в файле Web.config. Этот подход решил мою проблему.
Выбор целевой среды из свойств проекта
Ответ 5
Если вы использовали шаблон приложения Visual Studio 2012 ASP.NET Web Forms, то вы получили бы эту ссылку. Я предполагаю, что вы получите через Nuget вместо ссылки System.Data.Entity.
![enter image description here]()
Ответ 6
Я получил то же сообщение об ошибке. За исключением того, что в моем сообщении об ошибке указано "Не удалось загрузить файл или сборку" EntityFramework, Version = 6.0.0.0... ", потому что я установил EF 6.1.1. Вот что я сделал для решения проблемы.
1) Я запустил консоль управления NuGet, нажав "Сервис" > "Диспетчер пакетов NuGet" > "Консоль диспетчера пакетов"
2) Я удалил установленную EntityFramework 6.1.1, введя следующую команду:
Uninstall-package EntityFramework
3) Как только я получил подтверждение, что пакет был успешно удален, я установил версию 5.0.0, введя следующую команду:
Install-Package EntityFramework -version 5.0.0
Проблема решена.
Ответ 7
У меня была аналогичная проблема с модульными тестами с использованием MSTEST под Jenkins. Исправление в моем случае состояло в том, чтобы удалить "Version = 6.0.0.0", как показано ниже:
Old:
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=xxxx" requirePermission="false" />
New:
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Culture=neutral, PublicKeyToken=xxxx" requirePermission="false" />
Мне пришлось внести это изменение в несколько файлов App.config и Web.config в моем многопроектном решении.
Ответ 8
У меня была аналогичная проблема с селеном:
Я понизил свой селен с помощью NuGet и получил такое же сообщение об ошибке. Моим решением было удалить новые строки версии из файла app.config.
Ответ 9
У меня такая же проблема. Я получал System.Data.Entity.Infrastructure; ошибка, которая является лишь частью версии 5.0 или новее. Щелкните правой кнопкой мыши ссылку и выберите "Управление пакетом NuGet". В опции "Установленный пакет" удалите установленную платформу Entity FrameWork и установите версию 5.0. Это решает проблему. Я пытался вручную получить ссылку System.Data.Entity, которая не была успешной.
Ответ 10
public Configuration()
{
AutomaticMigrationsEnabled = false;
// register mysql code generator
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
}
Я выясню, что соединитель 6.6.4 не будет работать с Entity Framework 5, но с Entity Framework 4.3. Поэтому, чтобы понизить версию, выполните следующие команды в консоли диспетчера пакетов:
Uninstall-Package EntityFramework
Install-Package EntityFramework -Version 4.3.1
Наконец, я обновляю базу данных - снова и снова, и вуаля! Создаются схема и таблицы. Подождите, пока следующая версия соединителя не будет использоваться с Entity Framework 5.
Ответ 11
У меня была аналогичная проблема:
-
В моем проекте ASP.NET MVC я добавил базу данных Sql Server Compact (sdf) в папку App_Data. VS добавил ссылку на EntityFramework.dll, версия 4. *. Файл web.config
был соответствующим образом обновлен с конфигурацией 4. *.
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
-
Я добавил новый проект для своего решения (проект уровня доступа к данным). Здесь я добавил файл EDMX. VS добавил ссылку на EntityFramework.dll, версия 5.0. Файл App.config был соответствующим образом обновлен с помощью конфигурации 5.0
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
При выполнении при чтении из базы данных приложение всегда выдает исключение Could not load file or assembly 'EntityFramework, Version=5.0.0.0 ...
.
Проблема была устранена путем удаления EntityFramework.dll v4.0 из моего проекта MVC. Я также обновил файл web.config
с правильной версией 5.0. Затем все работало, как ожидалось.
Ответ 12
В ваших ссылках нажмите EntitiyFramework.
Перейдите к свойствам и установите для определенной версии значение False.
Это сработало для меня.