共存させたい理由
Visual Studio の開発で、x64限定のライブラリを利用している時、実行プラットフォームがx64にするわけだが、この状態で、Instant Client (ODP.NET) をx86、x64のどちらともインストールされていると、どうも接続がうまくできない。
『Oracle クライアント ライブラリを読み込もうとしましたが、BadImageFormatException が発行されました。この問題は、32 ビットの Oracle クライアント コンポーネントがインストールされている環境で 64 ビット モードを実行すると発生します。』
って言われる。
でも、開発環境を分離できない状況で、x86としても開発するし、x64でも開発するし、だとすると、Instant Client を入れたり消したりなどしないとダメそうで勝手が悪い。
やり方
Oracle Instant Client の64ビット版と32ビット版を共存させる方法に載ってた。
System32とSysWOW64に、それぞれシンボリックリンクを張ればいいそうな。
『oracle_instant_client12_2』部分は任意だけど、どちらも同一でなければならない。
-- x64のシンボリックリンクを張る
C:\> cd C:\Windows\System32
C:\Windows\System32> mklink oracle_instant_client12_2 C:\Oracle\instantclient_12_2x64
-- x86のシンボリックリンク張る
C:\> cd C:\Windows\SysWOW64
C:\Windows\SysWOW64> mklink oracle_instant_client12_2 C:\Oracle\instantclient_12_2x86
んで、環境変数のPATHに、
C:\Windows\System32/oracle_instant_client12_2
を追加すればいいらしい。
確認
Visual Studio でx86、x64プラットフォームどちらでも接続ができた!
足りないこと
上記の方法はOracleの実行イメージ?を切り替えるものであり、コマンドについても対応しているわけではない。
sqlplusなどを実行したい場合は、そのパスも環境変数のPATHに追加しなければならない。
私の場合、SI Object Browser などや、x86開発も多くあるため、コマンドとしてはx86の Instant Clientのパス情報を通すようにした。