ラベル VisualStudio の投稿を表示しています。 すべての投稿を表示
ラベル VisualStudio の投稿を表示しています。 すべての投稿を表示

2011年7月27日水曜日

Eclipse慣れしたボクがVisualStudio環境で困惑すること

これまではCとかJava一辺倒だった(むか~しVB 6.0とかExcel VBAとかもやってましたが、あれはまぁ、ねぇ)ボクですが、今回仕事でC#をVisual Studio 2010環境で弄ってまして、WebアプリケーションをASP.NET MVC3とRazorで作ってるわけですが、もう困惑しまくってます。
というわけで、今後のために「ここが違う」っていうのを、何回かに分けてメモっておきます。
#しかしアレだね、C#ってのはなかなかイケてる言語だね。今更ながら。

デバッグ用WEBサーバーがややこしい

EclipseでWebアプリ(Servlet)開発するとなると、まぁ一般的にはTomcatをインストールして、EclipseにTomcatプラグインを入れて、Eclipse側にTomcatのホームを教えてあげるじゃないですか。

で、下記のボタンを操作することでWEBアプリケーションサーバーが起動して、無事デバッグが出来るようになる。
一番左のボタンを押せばTomcat(WEBアプリケーションサーバー)が起動し、×印のボタンを押せば、サーバーが止まる。
実にわかりやすい。


Visual Studioでも当然、Webアプリのデバッグが出来る。下記の実行ボタンを押すと、Webアプリケーションサーバーが起動してデバッグが出来るようになる。

ちなみに、実行ボタンを押すとブラウザが自動的に起動して、自動で割り当てられたポートに対してアクセスした状態になる。

さらにちなみに、このポートを固定したければ、プロジェクトを右クリックしてプロパティを開き、「WEB」タブを選ぶ。すると、任意で指定したポートに固定したり、IISを指定したり出来る(ここで「え?IISを指定できるって、じゃあ一体何が動いているの?と思った方は勘がいい)。

ここまでは何となく理解できるが、実は既にEclipse+Tomcat環境に慣れ親しんだボクには既に理解し難いことが起こっている。

Tomcatの×ボタンに相当する(であろう)上記の停止ボタンを押したら、普通はWebアプリケーションサーバーも止まる、と考えると思うんだけど、Visual Studio は違う。実はこのボタンを押しても止まってなくて、証拠に、ボタンを押した後にIE等のブラウザを起動して同じポートにHTTPアクセスすると、同じように画面が表示されるんですねぇ。

じゃあ実行ボタンを押したら何が起こっているかと言うと、裏でコイツが起動している(パスは64bit環境の場合)。
C:\Program Files (x86)\Common Files\microsoft shared\DevServer\10.0\WebDev.WebServer40.EXE

要は、こいつがデバッガで、Visual Studioの三角の実行ボタンは「そのデバッガにブラウザをデタッチさせて起動する」ボタン、といったところ。たぶん。

ちなみに、環境とか設定のせいかもしれないけど、Visual Studioで「cshtml」とかのソース画面をアクティブにした状態で実行ボタンを押すと、その画面をブラウザで表示しようとしてエラーになるから気をつけろ。(csとかのhtmlではないソースをアクティブにした状態で実行すること!)


他にもいろいろ、本当にいろいろ「え?」っていうところがあるんだけど、また追々書いていこうと思います。

2011年6月27日月曜日

BadImageFormatException(x64とx86の混在はダメー!)

Visutal StudioでC#のコンソールアプリを作ってデバッグ実行するときは「Ctrl + F5」で実行しないとコマンドプロンプトがすぐ消えちゃってデバッグしにくいってことを知らずに、すぐ消えるコマンドプロンプトをどうやったら表示したままにておけるのか、10分ほど悩んじゃうぐらいMicrosoftな開発環境とは縁遠くなってしまった私です。Eclipseが恋しいよぅ。

さて、今回初めて開発用PCがWindows 7 の 64bit版を触っていて、いろいろ引っかかる部分が多いので、今後も引っかかりそうなものはここに書き留めていくことにします。

実行すると BadImageFormatException が出る

なんのことだかさっぱりでしたが、とりあえず参照設定したサードパーティのDLLの読み込みでNGらしい。で、ググってmsdnのリファレンスを見ると、この例外が発生する原因として
DLL または実行可能ファイルは 64 ビット アセンブリとして読み込まれますが、32 ビットの機能やリソースが含まれています。
という記載があった。

今回の環境は、

開発用PC(Visual Studioが動作しているPC)・・・Windows 7 Professional 64bit版
サードパーティのDLL・・・Windows 64bit版 DLL

ということで、Win64bit環境だしデフォルトで作れば問題なさそうな気もするが、実はVisual Studioで作成したアプリ(プロジェクト)のデフォルトが32bit(x86)という罠。

というわけで、Visual Studioのプロジェクト側の設定を64bitにしてやるとうまく動きました。

設定変更方法

Visual Studioの「ソリューションエクスプローラー」でソリューションを右クリック。
コンテキストメニューで「プロパティ」を選択。
「プラットフォーム」というプルダウン可能な項目があるので、環境に合わせて(今回だと「x86」から「x64」へ)変更。
※「x64」がプルダウンに無い場合は「構成マネージャー」を使って追加。




ちなみに無料のVisual Studio Expressだとこの設定ができないらしいが、実は単純に「Visualには」できないだけらしい(これナイスな情報ですね)。