2017-10-18 6 views
2

Oracle 11(32ビット)とOracle 12(64ビット)の問題があります。 32ビットのウィンドウを持つプラットフォームがあるため、32ビットのOracle11を標準化しました。 WinFormsのアプリケーションとAspサイトは、すべてのプラットフォームで32ビットモードで正常に動作します。IISでIIS-Expressと同じバージョンのOracleを使用する方法

私のマシンには、両方のOracleバージョンがあります。私はVisualStudio 2015で開発し、IISExpressでデバッグします。しかし、開発マシンでIISを実行しているときに、64ビットのOracle 12を実行しようとすると、例外がスローされます。Oracle.DataAccess.Client: the provider is not compatible with the version of Oracle Client.

Oracle 12をアンインストールするのは複雑なので、インストールディレクトリの名前を変更して無効にしましたc:\oracle\product\12.1.0XXX。また、レジストリキーHKLM/Software/OracleはOracle 12を指し、Oracle-11のみのサーバーには存在しないため、削除しました。

また、GACから2.121.2.0用のOracle dllをアンインストールしました。

リブート後、VS2015とIISExpressはOracleコードで正常に動作しますが、IISを使用するとエラー:Unable to load DLL 'OraOps12.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)が表示されます。これは、IISがIISExpress以外の場所でOracle DDLを探すことを示しています。

Oracle11は、Oracle11より前のPATH変数に記述されています。今日はPATHを簡単に変更する方法がわからないので、昔はautoexec.batに設定されていましたが、Oracle12のパス名を変更することでそれが解決されました。アプリケーションはPATHに記述されているすべてのディレクトリを調べ、Oracle12ディレクトリが存在しない場合はPATHの次のディレクトリを探し続けます。ただし、IISが明示的にOraOps12.dllを探している場合、Oracle11は使用されません。

私の質問は、IISにIISExpressと同じOracle DLLを使用させる方法です。

+0

Procmonを使用すると、DLLを探す場所をすべて表示できます。私はIISのDLLロード戦略についてはわかりませんが、PATHに基づいているため、LoadLibraryの呼び出しはパスなしで何をするのでしょうか。また、レジストリに格納されたパスを使用することもできます(PROCMONはレジストリへのアクセスも表示します)。 –

+0

@ LouFranco更新された質問のPATHを参照してください – Roland

+0

あなたが言うことに基づいて、私はあなたが本当にOracle 12をアンインストールする必要があると思います。私の推測では、レジストリの何かがそれを制御しています。 –

答えて

0

何も機能しないため、Oracle 12をアンインストールしました。これで問題は解決しました。

私が回避しようとした理由は、Oracle 12のアンインストールが非常に面倒です。すべてのOracleをアンインストールしてから、すべての手順が非常に遅いOracle 11を再インストールすることは可能です。仕事全体は約1時間半かかりました。その後、私は2.111.7.20の代わりにバージョン2.112.1.0を持っていたことが判明したので、Visual Studioのいくつかのプロジェクトで参照を置き換える必要がありました。

最後に、C#Asp.NetプロジェクトでOracle 12から64ビットのOracle dllを試してはいけないということです。ちょうど32ビットのOracle 11に固執してください。そうしないと後悔します。

関連する問題