首页 > 解决方案 > 出现错误“无法加载文件或程序集 'EntityFramework, Version=6.0.0.0, Culture=neutral' 或其依赖项之一。”

问题描述

请注意,我使用的是 VS 2017、.Net 框架 4.6.1 和实体框架版本 6.4.0。当我尝试运行单元测试项目时出现错误,错误如下所示,

'无法加载文件或程序集'EntityFramework,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089'或其依赖项之一。该系统找不到指定的文件。'

请注意我已经尝试过以下解决方案,

  1. 卸载 EF 版本 6.4.0 并安装 6.0.0
  2. 将 app.config 中的 EF 版本更改<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 参考属性“特定版本”设置为 false

通过尝试上述解决方案,我的问题仍然没有得到解决。

另外,请注意,我根据 Stack over flow 中提供的答案尝试了先前询问的有关同一问题的查询。

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)
            {

            }

任何建议将不胜感激。

标签: entity-framework

解决方案


发生这种情况的原因有很多,例如更改项目中 EF 依赖项的版本或安装依赖于 EF 的程序集。这可能是由于 EF 版本不匹配(没有配置的版本覆盖)或配置中遗留了错误配置的覆盖。

在 Visual Studio 中检查的第一件事是在解决方案资源管理器中选择解决方案,然后在右键单击上下文菜单中选择“管理解决方案的 Nuget 包...” 从这里选择“已安装”标题并找到“EntityFramework” . 在右侧,它将列出您的解决方案中的哪些程序集正在使用 EF 以及什么版本。确凿的证据是它说:“已安装:[ ***** ]”如果它说“安装了多个版本”,那么您的程序集引用了不同的版本。当您滚动浏览列表时,您可能会看到一些使用 6.4 和一些使用 6.0。如果您想全部使用 6.4,请勾选显示 6.0 的项目,然后确保从“版本:”下拉列表中选择 6.4 并选择“安装”。

或者,您可以检查您的测试项目以及任何应用程序项目的 app.config/web.config 文件中的程序集绑定。如果您有一个为 6.0 设置的通用 DLL,并且它被运行 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>

**编辑:请注意,上面的 publicKeyToken 值不是取自 EF,而是我有一个不同的程序集引用。如果要为 EF 添加依赖程序集条目,则需要检查 EF 的有效 publicKeyToken。我手头没有一个例子。

如果您的所有项目都指向 6.4 并且您仍然收到对 6.0 的引用错误,请仍然检查您是否<dependentAssembly>在任何项目中有引用并检查任何可能具有newVersion="6.0.0.0"设置的内容。有时在安装和升级依赖项时,这些依赖程序集引用最初会被添加,但随后不会被删除。在升级程序集引用时,我偶尔会遇到这个问题。


推荐阅读