きよくらの備忘録

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

VS2010とIIS ExpressでClassic ASPのデバッグ実行をする方法

Classc ASPは消えず

ASP.NETが世に出て10年目の2012年になりました。
しかし、未だにClassic ASP*1の案件は細々とかもしれませんが、まだまだ無くらないように見受けられる…ような気がします。


そんなClassic ASPですが、問題になるものの一つはずばり、開発環境です。
Classic ASPが現役バリバリだった時代はVisual Studio 6.0付属のVisual InterDevがありましたが、これは既にサポートは全て終了しています*2


では.NET世代のVisual Studioではどうでしょうか。
あまり知られていないような気もするのですが、実は.NET世代のVisual StudioでもClassic ASPのステップ実行や変数の監視などのデバッグ機能を利用する事が出来ます。


VS2003まではVS自体がClassic ASPデバッグ実行の機能を内包していたので、普通にブレークポイントを設定してF5キーを押して…という感じで、デバッグ実行が可能でした。


しかし、VS2005以降は少し事情が変わっています。標準でClassic ASPデバッグ実行する機能が無くなった*3ため、IISで実行させつつ、ワーカープロセスにVSからアタッチしてデバッグ実行する…というちょっと面倒な手順を踏む必要があります。
VS2005や2008でこれらを行いたい場合は、例えば以下の参考サイトを見ていただくのが解りやすと思います。

Visual Studio 2005でクラシックASPをデバッグする方法(まとめ) - 大人になったら肺呼吸
Visual Studio 2008でクラシックASPをデバッグする方法 - 大人になったら肺呼吸

Debuggin Classic ASP on IIS 7.5 + Visual Studio 2010

前述のサイトで取り上げられているのはXP+VS2005/2008です。ではVisual Studio 2010とWindows 7(つまりIIS 7.5)ではどうしょうか。

既にタイトルで書いてしまっているのでアレですが、もちろん、これも可能です。
若干異なる点はありますが*4、基本的には前述のVS2005や2008とほぼ同じ手順でデバッグ実行可能です。


一方、IIS7.5には、IIS Expressという、いわば開発用に特化したバージョンが存在します。このIIS Expressを使うと、実はもうちょっとだけ*5楽にやることが出来る事が解りました。
IIS Express自体については、このあたりを参照いただければと思います。 もっと Web 開発を簡単に ~ IIS Express と SQL Server Compact ~ - THE TRUTH IS OUT THERE - Site Home - MSDN Blogs


ここでは、その手順を少し詳しく書いてみたいと思います。

1. Visual Studio 2010とSP1をインストールする

これが無いとはじまりません。普通にインストールすればOKですが、SP1を当てることでIIS Expressに対応するようになるので、必ず当ててください。
なお無償版のVisual Web Developer Express Editionでは、Classic ASPデバッグ実行を行うことができません*6

2. IIS Expressをインストールする

IIS Expressが入っていない人は、インストールしてください。
マイクロソフト公式ダウンロード センターから インターネット インフォメーション サービス (IIS) 7.5 Express をダウンロード
Web Platform Installerからでもインストールできますので、お好みの方法でどうぞ。
Download the Microsoft Web Platform

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

IIS Express用の設定ファイルに少し手を加えます。
IIS Express用の各種設定ファイルは、実行ユーザのドキュメントフォルダ配下にあります。仮にログインユーザがkiyokuraだとすると、既定では以下のフォルダになります。
C:\Users\kiyokura\Documents\IISExpress\config

この中にある、「applicationhost.config」をテキストエディタなどで開いてください。中を見ていくと、の配下にというエントリーがあります。このaspにappAllowDebugging="true"という属性を加えます*7
私の環境の場合、前後も含めて抜粋すると、こんな感じになりました。

<system.webServer>
  <serverRuntime />
    <asp scriptErrorSentToBrowser="true" appAllowDebugging="true">
      <cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
      <limits />
    </asp>
   ...

参考:IIS Express and Classic ASP - Stack Overflow

4. VS2010でプロジェクトを作成します。

テンプレートは「ASP.NET 空のWebアプリケーション」をお奨めします(「Webサイト」ではないです。理由は後述)。
言語はどっちでもいいです*8

ASPのスクリプトは適宜、サイトやプロジェクトに追加してください。

またWeb.Configは要らないので消してしまってよいです。

ブレークポイントの設定は『Webアプリケーション』プロジェクトの場合は、任意のタイミングで行って良いですので、ここで設定しても大丈夫です。

しかし『Webサイト』のテンプレートを選んでいる場合には、ちょっとした罠があり、ここで設定しても解除されてしまうようです。注意してください。

5. 『IIS Expressを使用する』を実行

ソリューションエクスプローラからWebサイト(もしくはWebアプリケーションプロジェクト)を右クリックし、コンテキストメニューから『IIS Expressを使用する』を選択、実行してください。
他に設定は不要で、これだけでデバッグ実行時の実行環境がIIS Expressに切り替えられます。

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

ここが一点、注意するところがあります。これも恐らくVS2005以降では共通の注意点になりますが、Ctrl+F5、もしくはメニューから[デバッグなしで実行]を選択する必要があるということです。

普通にF5を押してデバッグ実行すると、次の項の手順を行うことが出来ず、結果としてデバッグ実行することができません。

また、ブラウザが開いたら、そのままにしておいて下さい。

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

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

  1. アタッチ先を[スクリプトコード]にする
  2. 選択可能なプロセスの一覧から、iisexpress.exeを探して選択、[アタッチ]ボタンを押す
8. ブラウザを操作し、デバッグを行ってください。

面倒くさい手順はこれで終わりです。
ブラウザを操作をすると、ブレークポイントで止まり、ステップ実行も可能です。
また変数の中身なども確認・書き換えもできます。

まとめ

以上の手順で、VS2010+IIS ExpressでもClassic ASPをデバッグ実行することができます。

余談

Windows 7内臓のIISを使わない点に比べて何か「ちょっとだけ楽」なのかというと…

  • IISにASPサポートを追加でインストールしなくて良い
  • IISにプロジェクト毎に『仮想ディレクトリの実体を作って設定』をしなくて良い
  • 常にIISを起動、もしくはいちいちIISを起動しなくて良い

とういうあたりでしょうか。
私は普段、クライアントでIISを起動していないので、VS内蔵の開発サーバと同じ要領で使うときだけプロセスが起動するIIS Expressの方が好みだったりします。


もし、IIS Expressを使わずに通常のIIS 7.xでやる場合は、下記のリンクなどを参考にしてやってみてください(出来ることは確認しています)。
<PAVE OVER> How to: Enable ASP Debugging in IIS
Debugging Classic ASP in Visual Studio 2010 - Stack Overflow

*1:レガシーASP、旧ASPとも

*2:…してますよね?プレミアムサポート契約だとどうか解りませんが…

*3:これはVS2005以降で標準となった、VS内蔵の開発用WEBサーバがClassic ASPに対応していなからなんじゃないか…と勝手に思っています。

*4:ワーカープロセスのexe名が変わっているとか、標準でASPの実行環境がインストールされないとか

*5:ほんのちょっとだけかもですが(^^;

*6:これはVS2005/2008も同様です。どうしても必要になる、他プロセスへのアタッチという機能が無償版には無いためです。

*7:これは通常のIISの設定で言うところの[ASP]−[デバッグのプロパティ]−[サーバ側のデバッグを有効にする]と同じ操作です

*8:どうせVBSで書くし