コンソールで ASP.NET を実行する方法 (ASP.NET4 と Visual Studio 2010 を利用)
当サイトの姉妹サイトの Web/DB プログラミング徹底解説 で以前、 コンソールで ASP.NET を実行する方法を紹介しました。
その記事はこちらです... » ASPX をコンソールで実行する方法
この記事の内容を読み返してみると、数年前にテストしたっきりという不安と、 nmake でビルドしていて少々とっつきにくかったかな、という反省が沸いてきました。
Hosting API を利用するためには、必ずしも makefile を書く必要があるわけではないのですからね。
そこで、当サイト "ASP.NET 入門" では入門サイトらしく(?)、Visual Studio を用いて同様のことをするにはどうすればよいか、 紹介します。
Visual Studio を利用するからといって、本質的な部分は変わりません。
System.Web.Hosting 以下に実装された Hosting API を用いて、ASP.NET のコアの部分を実行できるということです。
ASP.NET スクリプトをコンソールアプリケーションで実行する
では、ASP.NET スクリプトをコンソールアプリケーションで実行するコードを書いてみましょう。
大まかな流れは次のようになります。
- C# の Console Application プロジェクトを作成
- Hosting API を利用するコードを記述
- System.Web を参照
- キーファイルを作成してアセンブリにサイン
- GAC に登録
C# の Console Application プロジェクトを作成
C# の Console Application プロジェクトを作成したら、ビルドターゲットを .NET Framework 4 にします。
尚、ここではプロジェクト名を aspxexe としています。
Hosting API を利用するコードを記述
プログラムのコードは以前と同様に次の通りです。
using System;
using System.Web;
using System.Web.Hosting;
using System.IO;
namespace aspxexe
{
class HostingTest
{
public static void Main()
{
MyApplicationHost msh =
(MyApplicationHost)ApplicationHost.CreateApplicationHost(
typeof(MyApplicationHost),
"/",
@"C:\Temp"
);
msh.ProcessRequest();
}
}
public class MyApplicationHost : MarshalByRefObject
{
public void ProcessRequest()
{
SimpleWorkerRequest swr
= new SimpleWorkerRequest(
"test.aspx",
"",
Console.Out);
HttpRuntime.ProcessRequest(swr);
}
}
}
アプリケーションのルートディレクトリを @"C:\Temp" に固定としているところは簡略化しています。
System.Web を参照
System.Web.Hosting を利用するために System.Web.dll を参照設定します。 プロジェクトの参照設定から "Add References..." を選択します。
キーファイルを作成してアセンブリにサイン
プロジェクトのプロパティを選択して、"Signing" を選択します。
"Sign the assembly" チェックボックスをチェックして、ドロップダウンから "New" を選択します。
表示されたダイアログでキーファイル名を決めます。ここでは "mykey" としています。すると自動的に "mykey.snk" が作成されます。
GAC に登録
GAC に登録するために SDK ツールの gacutil を使う必要がありますが、ここでは Visual Studio の IDE を活用するために、 まずは外部ツールに GACUtil を登録してしまいましょう。
作成したアセンブリに対して、GACUtil のインストールコマンドを適用するためには次のようにします。
Visual Studio の Tools メニューから External Tools... を選択します。
表示されたダイアログで Add をクリックして、次のように登録します。
ポイントは GACUtil は正しいバージョンのそれを選ぶことと、インストールオプション (-i) に $(TargetPath) という出力されたアセンブリのパスを渡すことです。
.NET Framework 4 を利用しているなら、SDK パス\Bin\NETFX 4.0 Tools 以下の gacutil.exe を指定します。SDK パス\Bin 以下にも gacutil.exe は存在しますが、.NET Framework 3.5 用です。
実行テスト
テストスクリプトの作成
今回はテストスクリプトを次のようにします。これを C:\Temp\test.aspx とします。
<%@Page Language="C#" %>
<%
Response.Write("Hello, ASP.NET!\n");
for (int i = 0; i < 10; i++)
{
Response.Write("Hello! " + i + "\n");
}
%>
プログラムのビルドと GAC への登録
ビルドメニューから "Rebuild Solution" を選択して全体をビルドします。エラーなくビルドできるはずです。
ビルドできたら Tools メニューから上で登録した "Install to GAC" コマンドを実行します。Output ウィンドウに次のように表示されるはずです。
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1 Copyright (c) Microsoft Corporation. All rights reserved. Assembly successfully added to the cache
ASP.NET をコンソールプログラムで実行
Debug メニューから "Start Without Debugging" を選択すると、次のように表示されるはずです。
クリーンアップ: GAC からアンインストール
ここで GAC にアセンブリを登録しました。登録したままでは気持ち悪く、 削除したいという場合は次のようにすれば OK です。
gacutil -l オプションで登録状況が確認できます。確かに登録されていることを確認したら、 gacutil -u オプションでアンインストールできます。
> gacutil -l | findstr aspxexe aspxexe, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 67e815db2632c243, processorArchitecture=x86 > gacutil -u aspxexe Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1 Copyright (c) Microsoft Corporation. All rights reserved. Assembly: aspxexe, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 67e815db2632c243, processorArchitecture=x86 Uninstalled: aspxexe, Version=1.0.0.0, Culture=neutral, PublicKeyToken= 67e815db2632c243, processorArchitecture=x86 Number of assemblies uninstalled = 1 Number of failures = 0
もちろんこれも外部ツールとして登録するのも良いと思います。