【问题标题】:Could not load file or assembly 'EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies无法加载文件或程序集 'EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其依赖项之一
【发布时间】:2013-09-09 15:22:24
【问题描述】:

当程序尝试使用采用实体框架的方法时,我在 WCF Web 服务中收到此错误。但是,我们知道服务器安装了实体框架(正确版本),因为它托管了另一个 WCF Web 服务和一个成功使用它的 Intranet 站点。

我尝试将 copy local 设置为 true,但这只是将实体框架 dll 编译到使用它的项目的调试/发布文件夹中,而不是被部署的 Web 服务项目(该项目被部署包含一个引用使用实体框架的项目)。

之前有没有人遇到过这种问题并且知道使用或不使用copy local 的解决方法?

【问题讨论】:

  • 部署应用时,还需要部署 EntityFramework.dll。 EntityFramework.dll 旨在进行 bin 部署。在 EF6 之前,它需要核心 EF 组件 - System.Data.Entity.dll - 它确实存在于 GAC 中。对于 EF4.x 和 EF5 EntityFramework.dll 仅包含 DbContext API、CodeFirst(以及更新的版本还包括迁移),其余的位于 System.Data.Entity.dll(在机器上)中。

标签: wcf entity-framework entity-framework-4 entity-framework-4.1 wcf-data-services


【解决方案1】:

解决此问题的方法是简单地将生成的 EntityFramework.dll 和 .xml 文件放置在使用实体框架的项目的 bin 中,并将其放置在正在部署的服务项目的 bin 中。

【讨论】:

    【解决方案2】:

    检查相关 IIS 站点的应用程序池是否设置为用于更正 .NET Framework 版本。对于 EF 4.1,应用程序池应在 .NET Framework 4 或更高版本上运行。

    要识别站点使用的 .NET 版本,首先找出正在使用的应用程序池(在 IIS 中,单击站点的基本设置),然后在应用程序池节点下识别适当的池。应列出 .NET Framework 版本。

    【讨论】:

    • 在我们知道问题出在哪里之前,我们检查了大约两/三/四次。已验证它是 .NET 4+
    • 嗯 - 你不应该需要复制本地任何一种方式,因为这个 DLL 应该已经在 GAC...
    • EntityFramework.dll 不应在 GAC 中。只有 System.Data.Entity.dll 应该是 GAC 的。 EntityFramework.dll 是可部署的。他们可能没有将 EntityFramework.dll 与他们的应用程序一起复制到服务器。
    • @Pawel:现在我们正在使用实体框架的项目上测试设置copy local,并将.dll/.xml 文件复制到我们部署的项目的bin 中。还有比这更好的方法吗?
    • @NealR 我认为如果您在项目中有对 EntityFramework.dll 的引用,则 dll 应该与您正在使用的所有其他 dll 一起自动复制到输出目录。我不知道您如何部署您的应用程序,但基本上您需要确保 EF.dll 与所有其他 dll 一起复制。
    【解决方案3】:

    检查实体框架和服务器之间的位版本是否兼容。如果服务器是 64 位并且您使用的是 32 位实体框架 dll,您可能会收到此错误。然后更改应用程序池设置以启用 32 位应用程序。

    【讨论】:

    • EntityFramework.dll 是一个纯 IL/AnyCPU,应该可以在 32 位和 64 位进程中正常工作。
    猜你喜欢
    • 1970-01-01
    • 2019-03-18
    • 2017-07-02
    • 2016-08-28
    • 2017-02-14
    • 2017-11-08
    • 2018-03-21
    • 2016-07-19
    • 1970-01-01
    相关资源
    最近更新 更多