web-dev-qa-db-ja.com

ファイルまたはアセンブリ「Oracle.DataAccess」またはその依存関係の1つをロードできませんでした。不正な形式でプログラムをロードしようとしました

IIS 7.0 Windows Server 2008 R2 64bitにWebアプリをインストールしました。Oracle.DataAccess.dllを参照しています。アプリケーションにアクセスしようとすると、次のメッセージが表示されます。ファイルまたはアセンブリ「Oracle.DataAccess」またはその依存関係の1つをロードしてください。不正な形式のプログラムをロードしようとしました。」

14
Smehrt Tonni

「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 を試すことができます。

16
George Netu

アプリケーションプールの「Enable 32-bit Applications」をtrueに設定する によって、GACに11.2リリース5アセンブリを登録することを避けました。

12
Jeremy Cook
11
Jaanus

GAC utilを使用して、ライブサーバーにそのdllを登録する必要があります。また、binフォルダーに存在するかどうかを確認します。 binディレクトリにdllがない場合、同じエラーが発生することがあります

5
user240141

私の場合、VS 2010、Oracle v11 64ビットを使用しています。 64ビットモード(Webプロジェクト構成で「任意のCPU」モードに設定)で公開し、プロダクションサーバーでIISを32ビット互換性にfalseに設定する場合があります(サーバーが64ビットと私はそれを活用したいです)。

次に、「ファイルまたはアセンブリ 'Oracle.DataAccess'をロードできませんでした」という問題を解決します(「コンパイラエラーメッセージ:CS1705:アセンブリ」エラーが表示される場合があります)。

  • ローカルPCおよびサーバーには、Oracle v11、64ビットがインストールされています。
  • すべてのローカル開発PCで、64ビットのOracle.DataAccess.dll(C:\ app\user\product\11.2.0\client_1\odp.net\bin\4)を参照します。
  • IIS Production Serverでは、32ビット互換性をFalseに設定します。
  • System.Web.Mvc.dllのWebプロジェクトの参照は、ローカルPCのバージョンv3.0.0.1でしたが、実稼働環境ではMVCバージョン3.0.0.0のみがインストールされています。そのため、修正はローカルで3.0.0.1ではなくMVC 3.0.0.0で機能し、サーバーで再度公開され、機能します。
4

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に従ってシステムパスを更新してください。

3
Ross

George Netuが発行した受け入れられた回答は私の問題を解決するのに役立ちましたが、いくつかの些細なことをいじる必要がありました。

問題の説明:

C:\ Windows\Assemblyの下に、2つのOracle.DataAccessアイテム(GAC-folders?)が見つかりました。いくつかのOracleクライアントのインストールが原因で発生します。 1つのアイテムはバージョン2.112.1.0を示していましたが、実際バージョン2.121.2.0(Properties-> Versionで表示可能)でした。その矛盾がバグでした。

最初の役に立たない試み:

  • ランタイム/管理者の両方のバージョンで、Oracleフルクライアントを削除および再インストールしようとしました。
  • 正しい.dllを再デプロイしようとしました
  • コマンドプロンプトを介して上記の受け入れられた回答に記載されているように、GACサーバータイムに新しくインストールされたアセンブリをコピーしようとしました(ただし、バージョンの不一致は解決しませんでした。)
  • 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を再起動すると、動作します。

1
florian.isopp

ええ、それは私が時々直面した非常に迷惑な問題です。主な問題は、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フォルダーに移動します。

これが少しお役に立てば幸いです。幸運を。

1
Alex

同じ問題がありました。

プラットフォームターゲットを64ビット(x64)に設定する一般セクションのプロジェクトプロパティに移動し、問題を解決しました

0
Hasan Fathi