出现错误'无法加载文件或程序集'EntityFramework,Version = 6.0.0.0,Culture = neutral'或其依赖项之一。'

问题描述 投票:0回答:1

[请注意,我正在使用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 <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>中的EF版本更改为<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
  3. 将EF参考属性'特定版本'设置为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)
            {

            }

任何建议将不胜感激。

entity-framework
1个回答
0
投票

发生这种情况的原因很多,例如在项目中更改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>

[如果您所有的项目都指向6.4,并且仍然收到6.0的引用错误,请仍然检查任何项目中是否都具有<dependentAssembly>引用,并检查是否可能具有newVersion="6.0.0.0"设置。有时,在安装和升级依赖项时,最初会添加这些从属程序集引用,但不会将其删除。升级组装参考时,有时会遇到此问题。

© www.soinside.com 2019 - 2024. All rights reserved.