我使用实体框架,SQL Server 2000, Visual Studio 2008和企业库开发了一个应用程序。

它在本地工作得非常好,但是当我将项目部署到我们的测试环境时,我得到了以下错误:

Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information Stack trace: at System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark) at System.Reflection.Assembly.GetTypes() at System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadTypesFromAssembly(LoadingContext context) at System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.InternalLoadAssemblyFromCache(LoadingContext context) at System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadAssemblyFromCache(Assembly assembly, Boolean loadReferencedAssemblies, Dictionary2 knownAssemblies, Dictionary2& typesInLoading, List`1& errors) at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection, Assembly assembly, Boolean loadReferencedAssemblies) at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyForType(Type type) at System.Data.Metadata.Edm.MetadataWorkspace.LoadAssemblyForType(Type type, Assembly callingAssembly) at System.Data.Objects.ObjectContext.CreateQuery[T](String queryString, ObjectParameter[] parameters)

实体框架似乎有问题,任何线索如何修复它?


当前回答

如果部署到IIS,请确保允许在IIS上使用32位应用程序。您可以在当前应用程序池的设置上定义这一点。

其他回答

最初我尝试了Fusion日志查看器,但没有帮助 所以我最终使用WinDbg与SOS扩展。

!dumpheap -stat -type异常/D

然后我检查了FileNotFoundExceptions。异常中的消息包含未加载的DLL的名称。

注意,/D会给你超链接的结果,所以点击FileNotFoundException摘要中的链接。这将显示一个例外列表。然后点击其中一个例外的链接。那将!dumpobject异常。然后,您应该能够单击异常对象中的Message链接,然后您将看到文本。

如果部署到IIS,请确保允许在IIS上使用32位应用程序。您可以在当前应用程序池的设置上定义这一点。

当我试图用包管理器控制台添加实体框架迁移时,我也有同样的问题(但在我的本地)。

我解决这个问题的方法是创建一个控制台应用程序,其中Main()有以下代码:

 var dbConfig = new Configuration();
 var dbMigrator = new DbMigrator(dbConfig);
 dbMigrator.Update();

确保Configuration类是失败项目的迁移配置。你需要System.Data.Entity.Migrations来使用DbMigrator。

在应用程序中设置断点,并运行它。异常应该由Visual Studio捕获(除非您将异常类型设置为不中断调试会话),并且您应该能够找到您正在寻找的信息。

在我的案例中,缺少的引用是EFProviderWrapperToolkit。

我在引用一个nuget包时遇到了这个问题,后来使用删除选项将它从我的项目中删除。在与这个问题斗争了几个小时后,我不得不清理垃圾箱文件夹。为了避免这种情况,建议使用nuget卸载不需要的包,而不是通常的删除

我有一个。net 4.0, ASP。NET MVC 2.0,实体框架4.0 web应用程序开发在Visual Studio 2010。我遇到了同样的问题,它在一台Windows Server 2008 R2服务器上工作,但在另一台Windows Server 2008 R2服务器上不能工作,即使。net和ASP。NET MVC是一样的,抛出和你的一样的错误。

我听从了miko的建议,所以我在故障服务器上安装了Windows SDK v7.1 (x64),这样我就可以运行!dumpheap了。

事实证明,安装Windows SDK v7.1 (x64)解决了这个问题。任何缺失的依赖项都必须包含在SDK中。它可以从微软Windows SDK for Windows 7和。net Framework 4下载。