2012-05-24 15 views
5

Napisałem dość skomplikowaną aplikację C#, która uzyskuje dostęp do bazy danych Oracle za pośrednictwem ODP.Net. Rozwinąłem aplikację na komputerze z Windows XP (32-bit), gdzie zainstalowałem ODAC (32-bit). Aplikacja działa bez usterki na moim komputerze programisty, ale zgłasza wyjątek na serwerze (Windows Server 2003 x64 Service Pack 2).System.Reflection.RuntimeModule.GetTypes() błąd z ODP.Net i C#

Zainstalowałem środowisko wykonawcze dla .Net framework 4.0 (dotNetFx40_Full_x86_x64.exe) na serwerze, a także ODAC - najpierw wypróbowałem z wersją 4 (11.2.0.3.0) dla systemu Windows x64, a następnie z wersją ODAC 11.2 4 (11.2.0.3.0) z Oracle Developer Tools dla Visual Studio.

Żaden z zadziałał. Wersja 32-bitowa jest nieco dalej. Przy pierwszym wywołaniu instrukcji LINQ w bazie danych pojawia się następujący komunikat.

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

Wersja 64-bit mówi mi, że nie mają wsparcia Oracle.Access, który jest taki sam jak oryginalny komunikat o błędzie dostałem kiedy po raz pierwszy próbował uruchomić aplikację withouth ODAC na serwerze.

Czy ktokolwiek z was może mi w tym pomóc? Widziałem kilka wpisów omawiających podobne problemy i jedyną przekonującą odpowiedzią, którą widziałem było budowanie pliku wykonywalnego z ustawieniem Copy Local na TRUE dla wszystkich odniesień i, ale nawet to się nie udało. Nadal dostaję ten sam komunikat o błędzie.

Odpowiedz

2

Sam znalazłem odpowiedź sam. Ten fragment kodu, wpis autorstwa bgripki, który znalazłem w dyskusji na ten temat, dał mi odpowiedź. Było odniesienie do brakującej biblioteki (która nie była w ogóle potrzebna).

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); 
    } 
Powiązane problemy