IIS 7.0 Windows Server 2008 R2 64bitにWebアプリをインストールしました。Oracle.DataAccess.dllを参照しています。アプリケーションにアクセスしようとすると、次のメッセージが表示されます。ファイルまたはアセンブリ「Oracle.DataAccess」またはその依存関係の1つをロードしてください。不正な形式のプログラムをロードしようとしました。」
「11.2リリース3(11.2.0.2.1)with Xcopy Deployment」バージョンを使用したOracle Data Access Componentのインストールプロセスが壊れているようです。これを修正するには、欠落しているアセンブリをGACに登録する必要があります。この特定のバージョンに対してこれを行うには、管理コンソール内から次のコマンドを実行します。
md C:\Windows\Assembly\GAC_32\Oracle.DataAccess\4.112.2.0__89b483f429c47342\
copy %Oracle_HOME%\odp.net\bin\4\Oracle.DataAccess.dll C:\Windows\Assembly\GAC_32\Oracle.DataAccess\4.112.2.0__89b483f429c47342\
md C:\Windows\Assembly\GAC_32\Oracle.Web\4.112.2.0__89b483f429c47342\
copy %Oracle_HOME%\asp.net\bin\4\Oracle.web.dll C:\Windows\Assembly\GAC_32\Oracle.Web\4.112.2.0__89b483f429c47342\
これはDLLのみを登録し、他の言語リソースは登録しないことに注意してください。したがって、英語以外の言語(de、es、fr、it、ja、ko、pt-BR、zh-CHS、zh-CHT)を使用している場合は、対応するリソースを使用してこれらを登録する必要がありますファイル。
マシンにVisual Studioがインストールされている場合は、代わりに次のコマンドを発行できます。
gacutil /i %Oracle_HOME%\odp.net\bin\4\Oracle.DataAccess.dll
gacutil /i %Oracle_HOME%\asp.net\bin\4\Oracle.web.dll
注:Visual Studioのインストールフォルダーの下にあるgacutil.exeを探します。
お役に立てれば。
追伸または、 this を試すことができます。
アプリケーションプールの「Enable 32-bit Applications」をtrueに設定する によって、GACに11.2リリース5アセンブリを登録することを避けました。
AppPoolで32ビットアプリケーションを有効にする必要がある場合があります。
GAC utilを使用して、ライブサーバーにそのdllを登録する必要があります。また、binフォルダーに存在するかどうかを確認します。 binディレクトリにdllがない場合、同じエラーが発生することがあります
私の場合、VS 2010、Oracle v11 64ビットを使用しています。 64ビットモード(Webプロジェクト構成で「任意のCPU」モードに設定)で公開し、プロダクションサーバーでIISを32ビット互換性にfalseに設定する場合があります(サーバーが64ビットと私はそれを活用したいです)。
次に、「ファイルまたはアセンブリ 'Oracle.DataAccess'をロードできませんでした」という問題を解決します(「コンパイラエラーメッセージ:CS1705:アセンブリ」エラーが表示される場合があります)。
64ビットODAC 11.2リリース3(11.2.0.2.1)Xcopy for Windows x64のインストール:
http://www.Oracle.com/technetwork/database/windows/downloads/index-090165.html
私のためにそれを修正しました。 readmeファイルのステップ#4に従ってシステムパスを更新してください。
George Netuが発行した受け入れられた回答は私の問題を解決するのに役立ちましたが、いくつかの些細なことをいじる必要がありました。
問題の説明:
C:\ Windows\Assemblyの下に、2つのOracle.DataAccessアイテム(GAC-folders?)が見つかりました。いくつかのOracleクライアントのインストールが原因で発生します。 1つのアイテムはバージョン2.112.1.0を示していましたが、実際バージョン2.121.2.0(Properties-> Versionで表示可能)でした。その矛盾がバグでした。
最初の役に立たない試み:
gacutil /i ...
を使用しようとしました最終的な成功:
Gacutil.exe msdn page に到着し、最終的にC:\ Windows\Assemblyフォルダーからアイテムを削除できました。
gacutil /u Oracle.DataAccess, Version=2.112.1.0, Culture="Neutral",PublicKeyToken=45e343aae32233ca
gacutil /u Oracle.DataAccess, Version=2.212.2.0, Culture="Neutral",PublicKeyToken=45e343aae3223abc
gacutil /u Oracle.Web, Version=2.112.1.0, Culture="Neutral",PublicKeyToken=45e343aae3223def
その後、2つのgacutil /i ...
コマンドを繰り返し、2つのdllが一貫したバージョンで表示されました。
最後にIISを再起動すると、動作します。
ええ、それは私が時々直面した非常に迷惑な問題です。主な問題は、Webアプリケーションが誤って64ビットではなく32ビットのOracle.DataAccess.dllを使用すること、またはその逆の場合です。それにはいくつかの解決策があります。
1。アプリケーションが64ビットであり、32ビットOracle.DataAccess.dllを実行する必要がある場合、アプリケーションプールで32ビットアプリケーションを有効にします。
IISに移動し、アプリケーションプールの詳細設定の[32ビットアプリケーションを有効にする]オプションをtrueに設定します。
2。参照DLLの修正
参照パスは、Oracleインストールプロセスによって構成されたシステム参照パスであると想定されています。ただし、新しいOracleバージョンのインストールまたは更新、最新のDLLが古いDLLを更新しない、パスが変更される、またはWebアプリケーションプロジェクトの参照が更新されないなどの場合があります。したがって、Oracle.DataAccess参照を手動で修正する必要があります。
Webアプリケーションに移動し、Oracle.DataAccess参照を削除します。 Oracle.DataAccessの新しい参照を追加します。 Oracleインストールパスの正しいOracle.DataAccess.dllである必要があります。例えば:
C:\ Oracle\product\12.2.0\client_1\odp.net\bin\4\Oracle.DataAccess.dll
ODP.NETおよび依存するアンマネージドDLL不一致依存するアンマネージDLLの不一致バージョンをロードしました。
https://docs.Oracle.com/cd/E11882_01/win.112/e23174/InstallODP.htm#ODPNT152
3。問題を解決するための簡単で迅速な方法(ただし適切な解決策ではありません)は、Oracleインストールパス(たとえば、C:\ Oracle\product \)からコピーするOracle.DataAccess.dllファイルを直接上書きすることです12.2.0\client_1\odp.net\bin\4 \)からWebアプリケーションのBinフォルダーに移動します。
これが少しお役に立てば幸いです。幸運を。
同じ問題がありました。
プラットフォームターゲットを64ビット(x64)に設定する一般セクションのプロジェクトプロパティに移動し、問題を解決しました