我使用实体框架,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)

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


当前回答

解决方案是检查LoaderException:在我的情况下,一些DLL文件丢失了。

其他回答

其他建议都很好。在我的例子中,问题是开发人员的盒子是一台64位机器,使用各种api的x86位置,包括Silverlight。

通过更改目标平台以匹配部署web应用程序的32位服务器,消除了与无法加载一个或多个请求类型相关的大部分错误。

在我的情况下,我有一个nuget包,安装在我的项目,但包文件夹从未检入到TFS,因此,在构建机器的nuget包bin文件丢失。因此在生产中我得到了这个错误。我不得不比较bin文件夹在生产和我的本地,然后我发现哪些dll是缺失的,我发现那些属于一个nuget包。

还要检查在.csproj文件中是否没有<Private>True</Private>用于未加载的程序集

如果您在PowerShell中引用.dll时遇到此错误,而您的.dll是. net 5(。),那么你应该确保你在PowerShell 6+而不是Windows PowerShell 5.1(或更早的版本)中执行PowerShell脚本。这在一个特定的场景中帮助了我。

我在自动地图上出了点问题。在bin文件夹中,automap.4net.dll文件在那里,但由于某种原因,automap.xml和automap.dll不在那里。将它们复制到bin目录就解决了这个问题。