Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ODP.Net和C出现System.Reflection.RuntimeModule.GetTypes()错误#_C#_Ado.net_Odp.net_Odac - Fatal编程技术网

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

C# ODP.Net和C出现System.Reflection.RuntimeModule.GetTypes()错误#,c#,ado.net,odp.net,odac,C#,Ado.net,Odp.net,Odac,我编写了一个相当复杂的C#应用程序,通过ODP.Net访问oracle数据库。我在安装了ODAC(32位)的WindowsXP机器上开发了该应用程序。该应用程序在我的开发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

我编写了一个相当复杂的C#应用程序,通过ODP.Net访问oracle数据库。我在安装了ODAC(32位)的WindowsXP机器上开发了该应用程序。该应用程序在我的开发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),然后尝试了适用于Visual Studio的Oracle开发工具的ODAC 11.2版本4(11.2.0.3.0)

这些都不管用。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);
    }