トップ回答者
32bitと64bitとAnyCPUの関係について

質問
-
教えてください。
今まで、XPPro(32ビット)でVS2008Pro(VB)のアプリを作成していました。
このアプリをWindowsServer2008R2(64ビット)で動作させる為、そのサーバに
VS2008Proをインストールして、元のソースコードを持っていきました。
DBは、Oracleを使っており、11gR2(11.2.0.1.0)の for Microsoft Windows x64 を
購入し、インストールしました。
VSを開いたところ、まずは、Oracle.DataAccess が参照できなかったので、参照パスを
ORA_HOME\ODP.NET\bin\Oracle.DataAccess.dll にして解決できました。
VSのターゲットCPUは、「AnyCPU」に設定していますが、32ビットにすると上記DLLが
「異なるプロセッサを対象にしています」というワーニングが表示され、64ビットにすると
MSCORLIB.dll と System.Data.dll に対して、 「異なるプロセッサを対象にしています」
という ワーニングが表示されるので、結局、「AnyCPU」にしたのですが、1つのプログラム内
でオラクルのDLLは、64ビットですが、上記2つは、32ビットという混在って、アプリケーション上
問題はないのでしょうか?連続稼動させるアプリなので、数日間しか正常に動作しないアプリでは
困るので、このコンパイル方法でよいのかを教えて頂きたく存じます。
初心者なので、このような場合、「本来はこうすべき」というプロのご意見、ご指摘を頂ければ
幸いです。宜しくお願い致します。
回答
-
VS2008 で x64 環境で x64 をビルドすると、標準のプロジェクトテンプレートにおいても System.Data.dll と mscorlib.dll に対する CS1607 が発生します。(VS2010 では発生しません)
実際、海外のフォーラムを含めて検索すると同様の事例は報告されていますし、これらの DLL は実行時に x86 or x64 を適切に読み込むので無視してよい類いだと考えられます。ただし、Oracle.DataAccess.dll の方は無視できない可能性があります。
x86 としてビルドするのか、x64 としてビルドするのか、AnyCPU としてビルドするのかを決めて、適切なアセンブリを参照してください。
(x86/x64 と AnyCPU の違いがわからない場合はそこから調べましょう。そして自分の要件や Oracle のライブラリが求める前提と照らして、適切なものを選んでください)- 編集済み AzuleanMVP, Moderator 2013年2月13日 14:25
- 回答の候補に設定 佐伯玲 2013年2月18日 0:03
- 回答としてマーク 佐伯玲 2013年3月7日 5:18
すべての返信
-
VS2008 で x64 環境で x64 をビルドすると、標準のプロジェクトテンプレートにおいても System.Data.dll と mscorlib.dll に対する CS1607 が発生します。(VS2010 では発生しません)
実際、海外のフォーラムを含めて検索すると同様の事例は報告されていますし、これらの DLL は実行時に x86 or x64 を適切に読み込むので無視してよい類いだと考えられます。ただし、Oracle.DataAccess.dll の方は無視できない可能性があります。
x86 としてビルドするのか、x64 としてビルドするのか、AnyCPU としてビルドするのかを決めて、適切なアセンブリを参照してください。
(x86/x64 と AnyCPU の違いがわからない場合はそこから調べましょう。そして自分の要件や Oracle のライブラリが求める前提と照らして、適切なものを選んでください)- 編集済み AzuleanMVP, Moderator 2013年2月13日 14:25
- 回答の候補に設定 佐伯玲 2013年2月18日 0:03
- 回答としてマーク 佐伯玲 2013年3月7日 5:18