System.Reflection.RuntimeModule.GetTypes() 错误与 ODP.Net 和 C#.
本文关键字:ODP Net 错误 Reflection RuntimeModule GetTypes System | 更新日期: 2023-09-27 18:35:09
我编写了一个相当复杂的C#应用程序,它通过 ODP.Net 访问oracle数据库。我在安装了ODAC(32位)的Windows XP机器(32位)上开发了该应用程序。该应用程序在我的开发PC上运行没有故障,但在服务器上抛出异常(Windows Server 2003 x64 Service Pack 2)。
我在服务器上安装了.Net Framework 4.0(dotNetFx40_Full_x86_x64.exe)的运行时,以及ODAC——我首先尝试了Windows x64的Release 4(11.2.0.3.0),然后使用ODAC 11.2 Release 4(11.2.0.3.0)和Oracle Developer Tools for Visual Studio。
没有一个奏效。32位版本更进一步。第一次在数据库上调用 LINQ 语句时,我收到以下消息。
at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
at System.Reflection.RuntimeModule.GetTypes()
at System.Reflection.Assembly.GetTypes()
at System.Data.Metadata.Edm.ObjectItemAttributeAssemblyLoader.LoadTypesFromAssembly()
at System.Data.Metadata.Edm.ObjectItemAssemblyLoader.Load()
at System.Data.Metadata.Edm.ObjectItemAttributeAssemblyLoader.Load()
at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, ObjectItemLoadingSessionData loadingData)
at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, KnownAssembliesSet knownAssemblies, EdmItemCollection edmItemCollection, Action`1 logLoadMessage, Object& loaderCookie, Dictionary`2& typesInLoading, List`1& errors)
at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection, Assembly assembly, Boolean loadReferencedAssemblies, EdmItemCollection edmItemCollection, Action`1 logLoadMessage)
at System.Data.Metadata.Edm.ObjectItemCollection.ImplicitLoadAssemblyForType(Type type, EdmItemCollection edmItemCollection)
at System.Data.Metadata.Edm.MetadataWorkspace.ImplicitLoadAssemblyForType(Type type, Assembly callingAssembly)
at System.Data.Objects.ObjectContext.GetTypeUsage(Type entityCLRType)
at System.Data.Objects.ObjectContext.GetEntitySetForNameAndType(String entitySetName, Type entityCLRType, String exceptionParameterName)
at System.Data.Objects.ObjectContext.CreateObjectSet[TEntity](String entitySetName)
at MyProgram.Data.DT.DTContext3.get_MYTABLE()
64位版本告诉我我没有Oracle.Access支持,这与我第一次尝试在服务器上运行没有ODAC的应用程序时收到的原始错误消息相同。
你们谁能帮我?我看到一些讨论类似问题的条目,我看到的唯一令人信服的回复是构建可执行文件,并将所有引用的"本地复制"设置为 TRUE,但即使这样也失败了。我仍然收到相同的错误消息。
我自己找到了答案。这段代码是我在关于这个问题的讨论中发现的bgripka的一个条目,给了我答案。有一个对缺少库的引用(根本不需要)。
catch (ReflectionTypeLoadException ex)
{
StringBuilder sb = new StringBuilder();
foreach (Exception exSub in ex.LoaderExceptions)
{
sb.AppendLine(exSub.Message);
if (exSub is FileNotFoundException)
{
FileNotFoundException exFileNotFound = exSub as FileNotFoundException;
if (!string.IsNullOrEmpty(exFileNotFound.FusionLog))
{
sb.AppendLine("Fusion Log:");
sb.AppendLine(exFileNotFound.FusionLog);
}
}
sb.AppendLine();
}
string errorMessage = sb.ToString();
log.Fatal(errorMessage);
}