5

ODP.Net 経由で Oracle データベースにアクセスするかなり複雑な C# アプリケーションを作成しました。ODAC (32 ビット) をインストールした Windows XP マシン (32 ビット) でアプリケーションを開発しました。アプリケーションは開発用 PC では問題なく実行されますが、サーバー (Windows サーバー 2003 x64 サービス パック 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) を試しました。 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 に設定して実行可能ファイルをビルドすることでしたが、それでも失敗しました。それでも同じエラー メッセージが表示されます。

4

1 に答える 1

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);
    }
于 2012-05-29T08:07:12.247 に答える