Получение сообщения об ошибке «Не удалось загрузить файл или сборку» EntityFramework, версия = 6.0.0.0, культура = нейтральный или одна из ее зависимостей. ' - PullRequest
0 голосов
/ 13 января 2020

Обратите внимание, что я использую VS 2017, Net framework 4.6.1 и Entity Framework версии 6.4.0. Я получаю сообщение об ошибке при попытке запустить проект модульного теста и ошибку, как показано ниже,

«Не удалось загрузить файл или сборку» EntityFramework, Версия = 6.0.0.0, Культура = Нейтральный, PublicKeyToken = b77a5c561934e089 'или одна из его зависимостей. Системе не удается найти указанный файл. '

Обратите внимание, что я уже попробовал приведенные ниже решения,

  1. Деинсталлировано EF версии 6.4.0 и установлено 6.0.0
  2. Изменено EF-версия в app.config <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> в <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
  3. Установить для свойства EF Reference 'Specifi c Version' значение false

Пробуя приведенные выше решения, я по-прежнему выдавал не удалось решить.

Также обратите внимание, что я пытался на основе ответов, представленных в потоке стека для ранее заданных запросов на ту же проблему.

Файл App.config,

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --><!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <!--<section name="entityFramework"
             type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,
             EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
             requirePermission="false"/>-->
    <section name="entityFramework"
             type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,
                    EntityFramework, Culture=neutral, PublicKeyToken=b77a5c561934e089"
             requirePermission="false"/>
  </configSections>
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
    </providers>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v13.0"/>
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
  <connectionStrings>
    <add name="SOwDatabaseDbContext" connectionString="Data Source=ABC;Initial Catalog=SOW;Integrated Security=True"
      providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>

Файл Package.config,

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.4.0" targetFramework="net461" />
  <package id="EntityFramework.Core" version="7.0.0-beta6" targetFramework="net461" />
  <package id="EntityFramework.Relational" version="7.0.0-beta6" targetFramework="net461" />
  <package id="Ix-Async" version="1.2.4" targetFramework="net461" />
  <package id="Microsoft.Framework.Caching.Abstractions" version="1.0.0-beta6" targetFramework="net461" />
  <package id="Microsoft.Framework.Caching.Memory" version="1.0.0-beta6" targetFramework="net461" />
  <package id="Microsoft.Framework.Configuration" version="1.0.0-beta6" targetFramework="net461" />
  <package id="Microsoft.Framework.Configuration.Abstractions" version="1.0.0-beta6" targetFramework="net461" />
  <package id="Microsoft.Framework.Configuration.Binder" version="1.0.0-beta6" targetFramework="net461" />
  <package id="Microsoft.Framework.DependencyInjection" version="1.0.0-beta6" targetFramework="net461" />
  <package id="Microsoft.Framework.DependencyInjection.Abstractions" version="1.0.0-beta6" targetFramework="net461" />
  <package id="Microsoft.Framework.Logging" version="1.0.0-beta6" targetFramework="net461" />
  <package id="Microsoft.Framework.Logging.Abstractions" version="1.0.0-beta6" targetFramework="net461" />
  <package id="Microsoft.Framework.OptionsModel" version="1.0.0-beta6" targetFramework="net461" />
  <package id="Remotion.Linq" version="2.0.0-alpha-004" targetFramework="net461" />
  <package id="System.Collections" version="4.0.0-beta-23109" targetFramework="net461" />
  <package id="System.Collections.Immutable" version="1.1.37-beta-23109" targetFramework="net461" />
  <package id="System.Diagnostics.Debug" version="4.0.0-beta-23109" targetFramework="net461" />
  <package id="System.Globalization" version="4.0.0-beta-23109" targetFramework="net461" />
  <package id="System.Linq" version="4.0.0-beta-23109" targetFramework="net461" />
  <package id="System.Resources.ResourceManager" version="4.0.0-beta-23109" targetFramework="net461" />
  <package id="System.Runtime" version="4.0.0-beta-23109" targetFramework="net461" />
  <package id="System.Runtime.Extensions" version="4.0.0-beta-23109" targetFramework="net461" />
  <package id="System.Threading" version="4.0.0-beta-23109" targetFramework="net461" />
</packages>

Файл класса UnitTest (Обратите внимание, чтобы точно указать на проблему, связанную с EF. Я написал тестовые примеры непосредственно для класса репозитория)

TestMethod]
       public void InsertCategoryTest()
        {
            try
            {
                CategoriesRepository categoriesRepository = new CategoriesRepository(); // Throwing exception here
                Category categoryModel = new Category()
                {
                    CategoryName = "Test"
                };
                bool res = categoriesRepository.InsertCategory(categoryModel);
                Assert.AreEqual(res, true);
            }
            catch(Exception ex)
            {

            }

Любое предложение будет оценено.

1 Ответ

0 голосов
/ 14 января 2020

Это может произойти по ряду причин, таких как изменение версий EF-зависимостей в проекте или установка сборок, которые имеют зависимости от EF. Это может быть связано с несовпадением версий EF (без настроенного переопределения версий) или с неверно настроенным переопределением, оставленным в конфигурации.

Первое, что нужно проверить в Visual Studio, - это выбрать решение в решении. проводника и в контекстном меню правой кнопкой мыши выберите «Управление пакетами Nuget для решения ...». Здесь выберите заголовок «Установлено» и найдите «EntityFramework». Справа будет указано, какие сборки в вашем решении используют EF и какая версия. На курящем пистолете написано: «Установлено: [*****]» Если написано «Установлено несколько версий», значит, у вас есть сборки, ссылающиеся на разные версии. Прокручивая список, вы можете увидеть, что некоторые используют 6.4, а некоторые - 6.0. Если вы хотите использовать 6.4 для всех, отметьте проекты с версией 6.0, затем убедитесь, что 6.4 выбрано из выпадающего списка «Версия:», и выберите «Установить».

В качестве альтернативы вы можете проверить свой тестовый проект. и файл app.config / web.config любого проекта приложения для привязок сборки. Если у вас есть общая библиотека DLL, настроенная для 6.0, и она используется в более старых проектах, работающих под управлением 6.0, но вы также хотите использовать ее в новом проекте под управлением 6.4, тогда вы можете использовать отображение <dependentAssembly> в новом проекте для сопоставления. любые более ранние ссылки на сборки на 6.4

Это будет выглядеть примерно так:

<dependentAssembly>
    <assemblyIdentity name="EntityFramework" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-6.4.0.0" newVersion="6.4.0.0" />
</dependentAssembly>

** edit: Обратите внимание, что приведенное выше значение publicKeyToken не было взято из EF, но у меня была другая ссылка на сборку , Если вы go добавили запись зависимой сборки для EF, вам необходимо проверить действительный publicKeyToken для EF. У меня не было для этого примера.

Если все ваши проекты указывают на 6.4, и вы все еще получаете ошибку ссылки на 6.0, все равно проверьте, есть ли у вас ссылка <dependentAssembly> в любом из проектов и проверьте для любого, который может иметь настройку newVersion="6.0.0.0". Иногда при установке и обновлении зависимостей эти зависимые ссылки на сборки изначально добавляются, но затем не удаляются. Иногда я сталкивался с этой проблемой при обновлении ссылок на сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...