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

标签 c# ado.net odp.net odac

我编写了一个相当复杂的 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 的版本 4 (11.2.0.3.0),然后使用 ODAC 11.2 版本 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 的情况下运行应用程序时收到的原始错误消息相同。

你们中有人可以帮我吗?我已经看到一些讨论类似问题的条目,我看到的唯一令人信服的答复是构建可执行文件,并将所有引用的 Copy Local 设置为 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);
    }

关于c# - ODP.Net 和 C# 的 System.Reflection.RuntimeModule.GetTypes() 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739707/

相关文章:

c# - 如何在数据表中获取不同的记录?

c# - 将 CheckBox 列添加到具有持久性的 GridView

c# - 从 C# 中的 DBMS_OUTPUT.GET_LINES 获取输出缓冲区

c# - 由 C# 通过 Selenium 驱动的 Headless Edge

C# Visual Studio GPIB 命令

c# - 使用精确的 HTML 搜索或将 HTMLElement 转换为 HTMLNode 获取 HtmlAgilityPack 节点

.net - 如何在不使用 DataGrid 的情况下从 DataColumn 对象获取特定行或单元格值?

c# - 当装箱类型未知时检查不同类型的装箱值类型是否相等

oracle - Oracle 中基于 ODP.NET 查询的通知

c# - CHAR(1) 字段中出现 ORA-12899 错误,但我只发送 'C'