ASPX をコンソールで実行する方法 [.NET Framework]
aspx を自前のプログラムで実行できるよう、Hosting API (System.Web.Hosting 以下) が用意されています。 ここでは、試しに aspx を実行してコンソールに結果を返す EXE を作成してみましょう。
Hosting API の利用例
ソースコード
以下を HostingTest.cs として保存してください。
// // HostingTest.cs // // Author: Dado-san // http://keicode.com/ // using System; using System.Web; using System.Web.Hosting; using System.IO; ////////////////////////////////////////////////////////////////////////// class HostingTest { public static void Main() { MyApplicationHost msh = (MyApplicationHost) ApplicationHost.CreateApplicationHost ( typeof(MyApplicationHost), "/", Directory.GetCurrentDirectory() ); msh.ProcessRequest (); } } ///////////////////////////////////////////////////////////////////////////// public class MyApplicationHost : MarshalByRefObject { public void ProcessRequest () { SimpleWorkerRequest swr = new SimpleWorkerRequest ( "test1.aspx", "", Console.Out); HttpRuntime.ProcessRequest (swr); } }
makefile は以下の通り。
TARGETNAME=HostingTest SOURCE_FILE= HostingTest.cs CSC = csc.exe OUTDIR=.\chk all: "$(OUTDIR)\$(TARGETNAME).exe" igac: @gacutil /i $(OUTDIR)\$(TARGETNAME).exe /nologo @gacutil /l $(TARGETNAME) /nologo ugac: @gacutil /u $(TARGETNAME) /nologo "$(OUTDIR)" : @if not exist "$(OUTDIR)" mkdir "$(OUTDIR)" CSC_OPT=\ /nologo\ /target:exe\ /out:$(OUTDIR)\$(TARGETNAME).exe\ /doc:$(OUTDIR)\$(TARGETNAME).xml\ /debug+\ /debug:full\ /optimize-\ /warn:4\ /keyfile:key.snk $(OUTDIR)\$(TARGETNAME).exe: "$(OUTDIR)" $(SOURCE_FILE) key.snk $(CSC) $(CSC_OPT) $(SOURCE_FILE) key.snk: sn -k key.snk
ビルドと GAC への登録
上記コードを nmake でビルドした後、nmake igac でグローバルアセンブリキャッシュに登録します。
これにより、chk サブディレクトリに hostingtest.exe が作成されます。これは現在のディレクトリにある、 test1.aspx を実行します。
実行サンプル
ここでは以下のコードを test1.aspx として、nmake で作成された chk ディレクトリに保存してください。
<%@Page Language="C#" %> <% Response.Write("***** AppDomain Information *****\n"); Response.Write("BaseDirectory: " + AppDomain.CurrentDomain.BaseDirectory + "\n"); Response.Write("DynamicDirectory: " + AppDomain.CurrentDomain.DynamicDirectory + "\n"); Response.Write("FriendlyName: " + AppDomain.CurrentDomain.FriendlyName + "\n"); Response.Write("RelativeSearchPath: " + AppDomain.CurrentDomain.RelativeSearchPath + "\n"); Response.Write("\n***** AppDomainSetup Information *****\n"); AppDomainSetup adsetup; adsetup = AppDomain.CurrentDomain.SetupInformation; Response.Write("ApplicationBase: " + adsetup.ApplicationBase + "\n"); Response.Write("ApplicationName: " + adsetup.ApplicationName + "\n"); Response.Write("CachePath: " + adsetup.CachePath + "\n"); Response.Write("ConfigurationFile: " + adsetup.ConfigurationFile + "\n"); Response.Write("DynamicBase: " + adsetup.DynamicBase + "\n"); Response.Write("LicenseFile: " + adsetup.LicenseFile + "\n"); Response.Write("PrivateBinPath: " + adsetup.PrivateBinPath + "\n"); %>
実行例
chk ディレクトリで、HostingTest.exe を実行します。以下のように、確かに aspx コードが実行されることが確認できます。
> HostingTest.exe
***** AppDomain Information *****
BaseDirectory: C:\src\test\dotnet\hosting1\chk\
DynamicDirectory: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary
ASP.NET Files\root\bcb351aa\322ae141
FriendlyName: 4eb1ec78-1-128716113532120000
RelativeSearchPath: C:\src\test\dotnet\hosting1\chk\bin
***** AppDomainSetup Information *****
ApplicationBase: C:\src\test\dotnet\hosting1\chk\
ApplicationName: 322ae141
CachePath: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary
ASP.NET Files\root\bcb351aa
ConfigurationFile: C:\src\test\dotnet\hosting1\chk\web.config
DynamicBase: C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary
ASP.NET Files\root\bcb351aa
LicenseFile:
PrivateBinPath: C:\src\test\dotnet\hosting1\chk\bin
関連ページ
よくわかる IIS > ホステッドウェブコア API |