Visual Studio 2013 で ODP.NET 64bit版 を使う!
Visual Studio 2013 で Oracle の ODP.NET を使った
64bit Webアプリの開発環境の作り方です。
実はここ数日、大ハマリしてました。(汗
下記にポイントを列挙しますが、まだ誤解等があるかも?
この記事を見た方、お気づきの点ございましたら、ご指摘頂ければ幸いです。
*2015.03.31 一部訂正
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
以下内容を明確にするため、
ODP.NETのマイナーバージョンの相違で発生する現象には触れていません。
■目指す状態
◆Server
OS:Windows2012(64bit)
IIS8(64bit)
DB:Oracle Database 12c(64bit)
Oracle Data Access(64bit)
◆Client(開発環境)
OS:Windows8.1 Pro(64bit)
Visual Studio2013 Pro(32bit)※
Oracle Data Access(32bit)
Oracle Data Access(64bit)
(↑32/64bit 両方インストールします。詳しくは後述)
IIS8.5 Express(64bit)
※運用環境でASP.NET Webアプリを64bit ネイティブで
動作させる為の開発環境を作る。
■留意事項
Visual Studio2013 が 32bit という事 ※ココ重要
■環境作成手順
◆Server
IIS8とASP.NET 4.5 をセットアップ
Oracle Database12c(64bit)インストール
ODP.NET(64bit)もインストールされる
インストールフォルダーは c:\Oracle 等にする
※Oracle Data Provider for.NET の環境設定 ※ココ重要
(Oracle Home)\odp.net\managed\x64\configure.bat
を実行する。
これを忘れるとWebアプリ実行でSqlDataSourceなどの
「Oracle.ManagedDataAccess.Client」の呼び出して
「要求された .net framework データプロバイダーが見つかりません」などの
エラーが返される。
◆Client(開発環境)
Visual Studio2013 インストール
・ODTwithODAC121012(32bit)インストール
32-bit Oracle Data Access Components (ODAC)
with Oracle Developer Tools for Visual Studio
インストールフォルダーは c:\Oracle 等にする
Oracle home は「OraClient12Home1」にする。
C:\Oracle\product\12.1.0\client_1\Network\Admin\tnsnames.ora
・ODAC121012(64bit)インストール
64-bit ODAC 12c Release 2 (12.1.0.1.2) for Windows x64
※32bit版とは異なるフォルダーにインストールする
インストールフォルダーは c:\Oracle64 等にする ※ココ重要!
Oracle home は「OraClient12Home2」にする。 ※ココ重要!
C:\Oracle64\product\12.1.0\client_1\Network\Admin\tnsnames.ora
64bit版のODACはVisual Studio に対応している訳ではないので
「ODT」は付いていないのがミソ
Oracle Data Accessは
Visual Sutudio用の(開発ツールとしての)32bit版と
Webアプリ(ランタイム)で使う64bit版の両方が必要
◆Visual Studio 2013 の設定
・デバックで使う IIS Express の設定
[ツール]-[オプション]-
[プロジェクトおよびソリューション]
(開いた直後は見えないかも?[環境]の上にある)
[Webプロジェクト]
Webサイトおよびプロジェクト用IIS Expressの64ビットバージョンを使用
にチェックする。(デフォルトでは32bitで動作する)
・プロジェクト内の参照設定
64bit版を参照する
Oracle.DataAccess
(C:\Oracle64\product\12.1.0\client_1\ODP.NET\bin\4\Oracle.DataAccess.dll)
Oracle.ManagerDataAccess
(C:\Oracle64\product\12.1.0\client_1\ODP.NET\managed\common\Oracle.ManagedDataAccess.dll)
Oracle.Web
(C:\Oracle64\product\12.1.0\client_1\ASP.NET\bin\4\Oracle.Web.dll)
※「ローカルコピー」「特定バージョン」などのプロパティの設定は環境に合わせて設定
・サーバーエクスプローラー
32bit版を使う(何も考えなければ見えるのは32bit版)
「現在使用中のtnsnames.ora」には
C:\Oracle\product\12.1.0\client_1\Network\Admin\tnsnames.ora
が表示されているハズ
・構成マネージャー
Debug :x64
Ralease:x64
※表面的には32/64bitのどちらで動作しているかわかりにくい。
スタートアップのフォームで下記のようなコードを埋め込めば
確実に確認出来る。
(C#の場合)
if (System.Environment.Is64BitProcess) { this.Label1.Text = "64bit"; } else { this.Label1.Text = "32bit"; }
・Webを発行
発行内の「設定」
「ファイル発行オプション」
□発行中にプリコンパイルする はチェックしない ※ココ重要
発行中にプリコンパイルすると
「ファイルまたはアセンブリ '****'、またはその依存関係の
1つが読み込めませんでした。
間違ったフォーマットのプログラムを読み込もうとしました。」
という致命的なエラーが表示され発行できない。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-