コンソールで 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 スクリプトをコンソールアプリケーションで実行するコードを書いてみましょう。

大まかな流れは次のようになります。

  1. C# の Console Application プロジェクトを作成
  2. Hosting API を利用するコードを記述
  3. System.Web を参照
  4. キーファイルを作成してアセンブリにサイン
  5. 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..." を選択します。

System.Web の参照

キーファイルを作成してアセンブリにサイン

プロジェクトのプロパティを選択して、"Signing" を選択します。

アセンブリへのサイン

"Sign the assembly" チェックボックスをチェックして、ドロップダウンから "New" を選択します。

アセンブリへのサイン

表示されたダイアログでキーファイル名を決めます。ここでは "mykey" としています。すると自動的に "mykey.snk" が作成されます。

GAC に登録

GAC に登録するために SDK ツールの gacutil を使う必要がありますが、ここでは Visual Studio の IDE を活用するために、 まずは外部ツールに GACUtil を登録してしまいましょう。

作成したアセンブリに対して、GACUtil のインストールコマンドを適用するためには次のようにします。

Visual Studio の Tools メニューから External Tools... を選択します。

GACUtil の設定

表示されたダイアログで Add をクリックして、次のように登録します。

GACUtil の設定

ポイントは GACUtil は正しいバージョンのそれを選ぶことと、インストールオプション (-i) に $(TargetPath) という出力されたアセンブリのパスを渡すことです。

.NET Framework 4 を利用しているなら、SDK パス\Bin\NETFX 4.0 Tools 以下の gacutil.exe を指定します。SDK パス\Bin 以下にも gacutil.exe は存在しますが、.NET Framework 3.5 用です。

GACUtil の設定

実行テスト

テストスクリプトの作成

今回はテストスクリプトを次のようにします。これを 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 ウィンドウに次のように表示されるはずです。

GACUtil の設定

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" を選択すると、次のように表示されるはずです。

GACUtil の設定

クリーンアップ: 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

もちろんこれも外部ツールとして登録するのも良いと思います。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 ASP.NET 入門