none
32bitと64bitとAnyCPUの関係について RRS feed

  • 質問

  • 教えてください。

    今まで、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ビットという混在って、アプリケーション上

    問題はないのでしょうか?連続稼動させるアプリなので、数日間しか正常に動作しないアプリでは

    困るので、このコンパイル方法でよいのかを教えて頂きたく存じます。

    初心者なので、このような場合、「本来はこうすべき」というプロのご意見、ご指摘を頂ければ

    幸いです。宜しくお願い致します。

    2013年2月13日 7:47

回答

  • VS2008 で x64 環境で x64 をビルドすると、標準のプロジェクトテンプレートにおいても System.Data.dll と mscorlib.dll に対する CS1607 が発生します。(VS2010 では発生しません)
    実際、海外のフォーラムを含めて検索すると同様の事例は報告されていますし、これらの DLL は実行時に x86 or x64 を適切に読み込むので無視してよい類いだと考えられます。

    ただし、Oracle.DataAccess.dll の方は無視できない可能性があります。
    x86 としてビルドするのか、x64 としてビルドするのか、AnyCPU としてビルドするのかを決めて、適切なアセンブリを参照してください。
    (x86/x64 と AnyCPU の違いがわからない場合はそこから調べましょう。そして自分の要件や Oracle のライブラリが求める前提と照らして、適切なものを選んでください)

    2013年2月13日 14:24
    モデレータ

すべての返信

  • VSのターゲットCPUは、「AnyCPU」に設定していますが、32ビットにすると上記DLLが

    「異なるプロセッサを対象にしています」というワーニングが表示され、64ビットにすると

    MSCORLIB.dll と System.Data.dll に対して、 「異なるプロセッサを対象にしています」

    という ワーニングが表示される

    前半はその通りなのでしょう。後半は本来そのような警告は出ません。いつ何をどのように操作した時に「ワーニングが表示され」たのですか?
    もしかしてXPPro 32bit環境でのコンパイル中での話ですか?

    2013年2月13日 8:26
  • レスありがとうございます。

    ご質問にお答えします。

    どちらの操作も2008R2上のVS2008で、AnyCPU→32ビット、AnyCPU→64ビットにするとエラー一覧に

    表示され、AnyCPUならワーニングは一切表示されませんでした。

    回答になっておりますでしょうか?

    ただ、MSCORLIB.dll や System.Data.dll の参照先は、何も変更していないので、もしかするとこれらを

    64ビットのファイル?を参照するようにしないといけないのでしょうか?どこにあるか探してみますが.....

    2013年2月13日 8:43
  • VS2008 で x64 環境で x64 をビルドすると、標準のプロジェクトテンプレートにおいても System.Data.dll と mscorlib.dll に対する CS1607 が発生します。(VS2010 では発生しません)
    実際、海外のフォーラムを含めて検索すると同様の事例は報告されていますし、これらの DLL は実行時に x86 or x64 を適切に読み込むので無視してよい類いだと考えられます。

    ただし、Oracle.DataAccess.dll の方は無視できない可能性があります。
    x86 としてビルドするのか、x64 としてビルドするのか、AnyCPU としてビルドするのかを決めて、適切なアセンブリを参照してください。
    (x86/x64 と AnyCPU の違いがわからない場合はそこから調べましょう。そして自分の要件や Oracle のライブラリが求める前提と照らして、適切なものを選んでください)

    2013年2月13日 14:24
    モデレータ
  • 返信が遅くなりすいません。

    レスありがとうございました。

    2013年2月15日 11:15