Visual StudioでWebアプリ開発をするときによくお世話になるIIS Express、これは既定では32bitモードで動作します。これまでのWebアプリ開発では特に何事もなかったのですが、最近業務で以下のような環境下での開発をしていてハマりました。
- Windows 7 x64
- Visual Studio 2013 + IIS Express
- .NET Framework 4.5
- ASP.NET MVC 5
- Oracle 11g
これまでと違ったはOracleデータベースの利用。ずっとSQL Serverで開発をしていたのでOracleは初体験でした。Oracleへの接続にはODP.NETの64bit版を利用していたのですが、これを参照設定に追加しても全然動かない。具体的には、以下のようにBadImageFormatExceptionが飛んでいました。
つまるところ、32bitと64bitの混在はダメ!という内容です。そこまでは分かるのですが、Any CPUモードでのコンパイルをx64モードにしてもx86モードにしても動かない。何が悪いのかサッパリ分からない状態で丸一日以上悩んだ結果、ホスティングしているIIS Expressが32bitで動いているのではないかと思って調べてみました。
方法 1 : オプションでの設定
IIS Expressを64bitモードで動作させるには、Visual Studioのオプションの設定を変更すればOKです。
- [ツール] - [オプション] を開く
- [プロジェクトおよびソリューション] - [Web プロジェクト] を開く
- [Web サイトおよびプロジェクト用 IIS Express の64ビット バージョンを使用] をON
これでODP.NET 64bitでの参照設定の問題は解決しました。Oracleを使ったWeb開発で、今後こんな不毛な苦労をする人がいなくなりますように...。
方法 2 : レジストリでの設定
やらないとは思いますが、レジストリを直接編集することでも設定可能です。赤字で「xx.0」となっている箇所にはVisual Studioの内部バージョンが入ります。最新のVisual Studio 2013の場合は「12.0」です。
項目 | 値 |
---|---|
キー | HKEY_CURRENT_USER¥Software¥ Microsoft¥VisualStudio¥xx.0¥WebProjects |
値名 | Use64BitIISExpress |
データ | 1 |
レジストリの操作/編集には十分気を付けてください。