ODP.Net和C#的System.Reflection.RuntimeModule.GetTypes()错误

edd*_*edd 5 c# ado.net odp.net odac

我编写了一个相当复杂的C#应用​​程序,它通过ODP.Net访问oracle数据库.我在Windows XP机器(32位)上开发了应用程序,我安装了ODAC(32位).应用程序在我的开发PC上运行时没有出现故障,但在服务器上抛出异常(Windows Server 2003 x64 Service Pack 2).

我在服务器上安装了.Net framework 4.0(dotNetFx40_Full_x86_x64.exe)的运行时,以及ODAC - 我首先尝试使用适用于Windows x64的第4版(11.2.0.3.0),然后使用ODAC 11.2第4版(11.2. 0.3.0)使用适用于Visual Studio的Oracle Developer Tools.

没有工作.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()
Run Code Online (Sandbox Code Playgroud)

64位版本告诉我我没有Oracle.Access支持,这与我第一次尝试在服务器上运行没有ODAC的应用程序时获得的原始错误消息相同.

你能帮助我吗?我已经看到一些条目讨论类似的问题,我看到的唯一有说服力的回复是为所有引用设置Copy Local设置为TRUE的可执行文件,但即便失败.我仍然得到相同的错误消息.

edd*_*edd 2

我刚刚自己找到了答案。这段代码是我在有关此问题的讨论中找到的 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);
    }
Run Code Online (Sandbox Code Playgroud)