きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

Visual Studio 2012とIIS ExpressでClassic ASPのデバッグ実行を行う方法

本エントリはVisual Studio Advent Calendar 2012の17日目のエントリです。

Classic ASP on IIS 8

本年リリースされたWindows 8/Windows Server 2012に搭載されているIIS(Internet Information Services)はバージョン8となりました。
このIIS 8でもClassic ASPは動作します。Classic ASP(Active Server Pages / クラシックASP / レガシーASP)を動作させるための設定はIIS 7の時と同様です。

Windows 8IIS 8でClassic ASPを有効にするには

Windows 8IIS 8でClassic ASPを有効にするには、コントロールパネルの[プログラムと機能]→[Windowsの機能の有効かまたは無効化]ダイアログにて、[インターネット インフォーメーション サービス]−[World Wide Web サービス]−[アプリケーション開発機能]の中の[ASP]をチェックして有効にします。


Windows Server 2012のIIS 8でClassic ASPを有効にするには

Windows Server 2012のIIS 8でClassic ASPを有効にするには、[役割と機能の追加ウィザード]で、『Webサーバー(IIS)』を追加したあと、『Webサーバーの役割(IIS)』の役割サービスの選択で[アプリケーション開発]−[ASP]を選択します。


Debuggin Classic ASP on IIS 8 + Visual Studio 2012

本年はIISの他に、Visual StudioもバージョンアップしてVisual Studio 2012となっています。Classic ASPとまだお付き合いすることがある身としては、デバッグ実行可能かどうかというのは気になります。結論から言いますと、可能です。だだし、大体はIIS 7.5+VS2010の時(VS2010とIIS ExpressでClassic ASPのデバッグ実行をする方法)と同じなのですが、何点か異なる点もあります。

せっかくですので、画面キャプチャ付きで、IIS 8.0 Express+VS2012でデバッグ実行を行う手順を紹介したいと思います。

1.前提条件

前提条件として、これもVS2010の時と同様、Visual Studioは有償のProfessional以上である必要があります。無償版の「Visual Studio Express for Web」では後の工程で必要なプロセスへのアタッチができないため、デバッグ実行を行うことができません。
なおIIS 8.0 Expressついては、VS2012では基本的に標準でインストールされ、既定でこちらを使う設定になっています*1。もし何らかの理由でインストールされていない場合は、Web Platform Installerからインストールしてください。

2. IIS Expressで『サーバサイドスクリプトデバッグ』を有効にする

IIS Express用の設定ファイルに少し手を加え、スクリプトのデバッグが行えるようにします*2。対象の設定ファイルは『C:\Users\<ユーザ名>\Documents\IISExpress\config\applicationhost.config』です。

このapplicationhost.configをテキストエディタで開きの配下にあるのエントリーにappAllowDebugging="true"という属性を加えます。前後も含めると、こんな感じです*3

<system.webServer>
  <serverRuntime />
    <asp scriptErrorSentToBrowser="true" appAllowDebugging="true">
      <cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
      <limits />
    </asp>
   ...
3.VSでプロジェクトを作成する

Visual Studioでプロジェクトを作成します。「Webサイト」でも「Webアプリケーションプロジェクト」でもどちらでも構いません。VS2010では、若干「Webアプリケーション」プロジェクトのほうが使いやすかったですが、今回はWebサイトのほうが若干、楽かもしれません(この点は後述します)。今回は「Webサイト」で作ってみます。新規作成から、[Webサイト]を選択し、テンプレートでは『ASP.NET空のWebサイト』を選択します。言語はどちらでも構いません。

テンプレートの展開が終わったら、Web.Configファイルは不要なので消してしまいましょう。

4.ASPファイルの追加

サイトの配下にデバッグ対象のaspファイルを配置します。必要であれば、追加したファイルを右クリックして「スタート ページに設定」を行います。

(ちなみに、Webアプリケーションプロジェクトの場合、なぜかaspファイルのコンテキストメニューでは「スタート ページに設定」ができなくなっています*4)。

5.「デバッグなしで実行」する

VS2005以降では共通の注意点になりますが、Ctrl+F5、もしくはメニューから[デバッグなしで実行]で開始する必要があります。普通にF5を押してデバッグ実行すると、次の手順で必要なプロセスのアタッチを行うことができません。
実行してブラウザが起動したら、とりあえずブラウザはそのままにして次のステップに進んでください。

6.IIS Expressのプロセスにアタッチする

メニューから[デバッグ]−[プロセスにアタッチ]を選択してダイアログを表示させます。その中で2つの操作を行います。

・アタッチ先を[選択]し、[スクリプトコード]にする

・選択可能なプロセスの一覧から、iisexpress.exeを探して選択、[アタッチ]ボタンを押す


7.ブレークボーイントを設定する(ただし、動的生成のほう)

いよいよブレークポイントを張ることになりますが、注意点はここです。VS2010ではそのまま元のファイルに張ればよかったのですが、2012では実行時に動的に生成されたデバッグ用のファイルに対して設定する必要があります
前項の操作でプロセスをアタッチすると、ソリューションエクスプローラに「スクリプトドキュメント」という項目が表示され、その中に実行しているaspファイルが表示されます。このファイルを開いて、ブレークポイントを設定することになります。


一度デバッグを停止するとブレークポイントの設定は解除されるので注意が必要になります。一度実行してキャッシュ(?)されると、デバッグを停止したりファイルを書き換えたりしなければ、ページ遷移を行ってもブレークポイントの設定は維持されるようです。

終わりに

どうやらまだしばらくはIISのClassic ASPのサポートは続きそうな気配がします*5
一方、Visual StudioによるClassic ASPのサポートは年々衰退してるように見えます。これはしょうがないですね。

Classic ASPはIISで動作するといっても、互換性のために残されているにすぎません。継続して安定して使用する為にサポート去れているわけでは無いと捉えるべきだと思いますし、ましてや新規にアプリを開発して運用など、やってよいものでは決して無いでしょう。ですのでVSでのClassic ASPのデバッグ実行についても「『どうしても』という時の頼みの綱」くらいに捉えておく必要があると思います。
今後も継続して保守・運用するアプリケーションであれば、何等かモダンな環境に移行すべきであるということを強く推奨して、本エントリを終わりたいと思います。



さて、明日のVisual Studio Advent Calendar 2012は引き続き私です。…ネタはまだ未定です(^^;

*1:そのはずです。個別にインストールした記憶がないのに入っているので…。もし違ったらご連絡ください!

*2:通常のIISのアプリケーションのプロパティで「ASPのサーバー側のスクリプトのデバッグを有効にする」にチェックを入れるのと同様の設定を行う

*3:ちなみに、ものファイルの頭のほうにのコメント中にという記述があるので、そっちと間違えないようにしてください。(一度間違えてそちらを書き換えて、デバッグが有効にならずに悩んだのは内緒)

*4:直接、プロジェクトのプロパティの設定で行うと指定可能

*5:なんとなくですが。ただ、Azureでも動作しますし、そうそう簡単にサポートを切ることはないと思えます。