2012-05-24 7 views
5

Ich schrieb eine ziemlich komplexe C# -Anwendung, die über ODP.Net auf eine Oracle-Datenbank zugreift. Ich entwickelte die Anwendung auf einem Windows XP-Rechner (32-Bit), wo ich ODAC (32-Bit) installiert habe. Die Anwendung läuft ohne Fehler auf meinem Entwicklungs-PC, löst aber eine Ausnahme auf dem Server aus (Windows Server 2003 x64 Service Pack 2).System.Reflection.RuntimeModule.GetTypes() Fehler mit ODP.Net und C#

Ich installierte die Laufzeit für .Net Framework 4.0 (dotNetFx40_Full_x86_x64.exe) auf dem Server, sowie ODAC - Ich versuchte zuerst mit Release 4 (11.2.0.3.0) für Windows x64 und dann mit ODAC 11.2 Release 4 (11.2.0.3.0) mit Oracle Developer Tools für Visual Studio.

Keine der funktioniert. Die 32-Bit-Version hat ein bisschen weiter. Beim ersten Aufruf einer LINQ-Anweisung in der Datenbank erhalte ich die folgende Nachricht.

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() 

Die 64-Bit-Version sagt mir, ich habe keine Oracle.Access Unterstützung haben, die die gleiche wie die ursprüngliche Fehlermeldung, die ich bekam, als ich zum ersten Mal die Anwendung withouth ODAC auf dem Server auszuführen versucht.

Kann jemand von Ihnen mir dabei helfen? Ich habe einige Einträge gesehen, die ähnliche Probleme diskutieren, und die einzige überzeugende Antwort, die ich gesehen habe, war das Erstellen der ausführbaren Datei mit Copy Local für alle Referenzen auf TRUE gesetzt, aber selbst das ist fehlgeschlagen. Ich bekomme immer noch dieselbe Fehlermeldung.

Antwort

2

Ich habe gerade die Antwort selbst gefunden. Dieses Stück Code, ein Eintrag von bgripka, den ich in einer Diskussion über dieses Thema gefunden habe, gab mir die Antwort. Es gab einen Hinweis auf eine fehlende Bibliothek (die überhaupt nicht benötigt wurde).

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); 
    } 
Verwandte Themen