2017年3月7日火曜日

ODP.Net x64ビルドしないと動かない

未だに会社のPCが32bitなのもどうかと思いますが、
AnyCPUでビルドしたODP.Net利用のプログラムが、
Widnows2012Server64bitで動かない現象が発生しました。
お互いの環境の詳細は以下の通り。


<開発PC>
OS:Windows7 32bit
Visual Studio 2013(C#)
Oracle:ODTwithODAC121024.zip をセットアップ

<サーバPC>
OS:WIndowsServer2012 64bit
Oracle:ODAC121024_x64.zip をセットアップ

OracleDBへの接続は、生意気にもDbProviderFactoriesを使ってみました。
----------------
DbProviderFactory factory = DbProviderFactories.GetFactory("Oracle.DataAccess.Client");
----------------

開発PCからは問題なく繋がるのに、サーバで実行すると、
「.net framework データ プロバイダーが見つかりません。これは、インストールされていない可能性があります。」とエラーが発生。

タスクマネージャで実行ファイルを見てみたところ、32bitで動作している事が判明。
読み込んでいるDLL群は全部AnyCPUビルドなのに何故64bitOS上で32bitで動いてるの!?
うぅ~~ん。
サーバに入れたのは64bitのOracle様なのでGAC側を見に行ってるよね、きっと。
セットアップで入ったハズのOracle.Data.Access.dllはGAC_64に入ってるハズだよね。

なので、サーバにVS2013を入れてx64でビルドし直したところ、
上記コードで正常に接続できるようになりました。

AnyCPUじゃダメなのかなぁ。

参考にしたのは以下サイト
<参考:http://d.hatena.ne.jp/JF2LFG+katsusysd/20140621>