web-dev-qa-db-ja.com

ファイルまたはアセンブリ「Oracle.DataAccess」またはその依存関係の1つをロードできませんでした

このWebアプリケーションを実行しようとしています。 「ファイルまたはアセンブリ「Oracle.DataAccess」またはその依存関係の1つをロードできませんでした。不正な形式のプログラムをロードしようとしました。」というエラーが引き続き表示されます。例外の詳細:System.BadImageFormatException。 「ファイルまたはアセンブリ「Oracle.DataAccess」またはその依存関係の1つをロードできませんでした。不正な形式のプログラムをロードしようとしました。」以下は、私がすでに試したことです。

1)すべてのOracle dllを32ビットOracle dll、つまり2.112.3.0に置き換えました

64ビットマシンに32ビットクライアントをインストールしています。オペレーティングシステムはWindows 7です。

2)個々のプロジェクトを個別にコンパイルします。すべてのOracle依存ファイルdllを削除してから、2.112.3.0のdllを個別に追加してから、各プロジェクトをコンパイルしました

3)このステートメントgacutil/i%ORA_HOME4%\ odp.net\bin\4\Oracle.DataAccess.dllを使用して、GACに32ビットdllを登録します

gacutil/i%ORA_HOME4%\ asp.net\bin\4\Oracle.web.dll

上記の2つのステートメントでは、gacutil.exeをc:\ Program Files(x86)\ Microsoft sdk\windows\v7.0A\Bin\NETFX4.0 Tools\X64からC:\ドライブにコピーしてから、

上記の2つのステートメントを実行しました。

gacutil/i%ORA_HOME4%\ odp.net\bin\4\Oracle.DataAccess.dll gacutil/i%ORA_HOME4%\ asp.net\bin\4\Oracle.web.dll上記の2つのステートメントを実行したとき、メッセージを取得しないで、管理者権限でDosウィンドウで実行しました。

4)また、この場所からすべての一時ASP.netファイルを削除しました

c:\ windows\Microsoft.Net\V4.0.30319\temporary ASP.netファイルまた、WebアプリケーションビルドプラットフォームターゲットをX86に変更しました。元々は「ANy CPU」でした。欲求不満から、プラットフォームのターゲットをX64に変更しようとしても、エラーメッセージが表示されました

「ファイルをロードまたはコールドしない。webapp」またはその依存関係の1つ。不正な形式のプログラムをロードしようとしました。

IISがコンピューターにインストールされていないため、このアプリケーションをVisual Studio 2010で実行しているため、組み込みのIISビジュアルスタジオで。

私はこの問題を解決するのに多くの時間を費やしていますが、それでも同じエラーを何度も繰り返します。

ヘルプやヒントは高く評価されます。

32
Anjali5

あるマシンから別のマシンに移動し、すべてを再インストールしたときに再び問題が発生しました。私の場合、32ビットと64ビットの両方のOracle ODP.NETインストールを使用しています。

新しいマシンでアセンブリをリストすると、次のリストになりました

 C:\Oracle\product\11.2.0\X64\odp.net\bin\4>gacutil /l|findstr Oracle.DataAccess
     Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.102.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.111.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.2.112.Oracle.DataAccess, Version=2.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
     Policy.4.112.Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64

ここに表示されるのは64ビットDLLのみです。

enter image description here

Web.configからは表示されませんでしたが、使用していたのは32ビットバージョンでした。

古いマシンをGACutilでチェックすると、X86のDLLも多く見られました。

登録プロセスを再適用することで修正されました(x32/x64の両方のバージョンはここで参照されます)

OraProvCfg.exe /action:gac /providerpath:C:\Oracle\product\11.2.0\x32\ODP.NET\bin\4\Oracle.DataAccess.dll

OraProvCfg.exe /action:gac /providerpath:C:\Oracle\product\11.2.0\x64\ODP.NET\bin\4\Oracle.DataAccess.dll

その後、Visual Studioは幸せなバニーになり、すべてを再びコンパイルしてくれました。

3
KriZ

これを試してください:Open IIS Manager、アプリケーションプールの詳細設定を変更し、[32ビットアプリケーションを有効にする]をfalseに変更します。

33
user3048209

私は次の手順で解決策を見つけました:

  • Oracle.DataAcces.dll参照を削除し、
    そして新しい参照を追加します:
    C:\windows\Assembly\GAC\Oracle.DataAccess\X.XXX.X.XX__89b483f429c47342/Oracle.dataaccess.dll
  • ローカルコピーをfalseにします。

それが役に立てば幸い

24
Saikat Daripa

AppPoolで32ビットアプリケーションを有効にする必要がある場合があります。 IIS=>アプリプールを右クリック=>事前設定=> '32ビットアプリケーションを有効にする 'をtrueに移動します。

アプリプールと、そのアプリプールを指す対応するアプリケーションを再起動することを忘れないでください。

8
Kifayat Ullah

私の場合、次のことで問題が解決しました。

  1. http://www.Oracle.com/technetwork/topics/dotnet/utilsoft-086879.html から「32ビットOracle Data Access Components(ODAC)for Oracle Developer Tools for Visual Studio」をダウンロードする
  2. 次に、ファイルの場所を参照するか、[Oracle.dataaccess.dll]タブの参照リストから参照.NETbinファイルに追加します。
2
bax 1188

IIS ExpressおよびVS 2017:を使用している場合

[Webアプリケーションのプロパティ]> [Web]タブ> [サーバー]セクションに移動し、ビット数をx64に変更します。

2
ADH

私にとっては他のすべてはほとんど問題ありませんでしたが、どういうわけかプロジェクトの設定が変更され、IISLocalの代わりにiisExpressが使用されるようになりました。 (IISLocalで)仮想ディレクトリを変更してポイントすると、再び完全に機能し始めました。

0
Biki

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

次に、「ファイルまたはアセンブリ 'Oracle.DataAccess'をロードできませんでした」という問題を解決します。

  • ローカルPCおよびサーバーには、Oracle v11、64ビットがインストールされています。
  • すべてのLocal Dev 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でローカルに機能し、サーバーで再度公開され、機能します。
0

また、「ODAC112030Xcopy.Zip」のinstall.batファイルを 64ビットOracle Data Access Components(ODAC)ダウンロード からダウンロードして実行できます。これで問題が解決しました。

0
Sunil

Oracle.dataaccess.dllの64ビットバージョンが必要でしたが、使用している他のライブラリで問題が発生しました。

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

上記のいくつかの手順を実行しました。プロジェクトプールの設定を進めて32ビットが有効になるように切り替えますが、そのように残しておくことに満足しなかったので、再び有効にしました。

私のプロジェクトには、Elmahおよびlog4netの参照に依存する参照もありました。これらの最新バージョンをダウンロードしたので、私のプロジェクトは、プールの32ビット許可設定を変更することなく、正常にビルドおよび実行できました。

0