ASP.NET ver2.0 の機能として、事前にコンパイルした dll を配布して
アプリケーションを実行する、というものがあります。
この場合、コンパイルする時間が必要なくなる、ソースを隠蔽する
ことができる、といったメリットが享受できます。
ASP.NET ver1.1でも同じようなことができないのかいろいろやってみた
結果、以下の手順で実行できることが確認できました。
1.実行するサンプルの準備
IIS 上に sample フォルダを作成し、Webアプリケーションとして設定します。
ここに以下の内容で Page1.aspx、Page2.aspx ファイルを作成します。
Page1.aspx
------------------------------------------------
<%@ Page language="c#"%>
<html>
<head>
<script runat=server>
void button1_Click(Object sender, EventArgs e)
{
Server.Transfer("page2.aspx");
}
</script>
</head>
<body>
Page1 です<br />
<form runat="server">
<asp:Button id="Button1" Text="Page2へ" OnClick="button1_Click" runat="server"/>
<br />
</form>
</body>
</html>
------------------------------------------------
Page2.aspx
------------------------------------------------
<%@ Page language="c#"%>
<html>
<head>
<script runat=server>
void button1_Click(Object sender, EventArgs e)
{
Response.Redirect("page1.aspx");
}
</script>
</head>
<body>
Page2 です<br />
<form runat="server">
<asp:Button id="Button1" Text="Page1へ" OnClick="button1_Click" runat="server"/>
<br />
</form>
</body>
</html>
------------------------------------------------
2.実行用フォルダの準備
IIS 上に compiled フォルダを作成し、Webアプリケーションとして設定します。
この下に bin フォルダを作成しておきます。
3.テンポラリフォルダのクリーンアップ
ASP.NET は実行時に dll をテンポラリフォルダに作成します。
ここで作られる dll を取り出しますので、まず最初にテンポラリフォルダを
きれいにしておきましょう。
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files
標準ではここがテンポラリフォルダになりますから、このフォルダの下に
存在しているフォルダをすべて削除してしまいましょう。
なお、削除できないファイルがある場合は、コンピュータの管理ツールから
World Wide Web Publishing サービスを停止して再度削除を行ってください。
停止したサービスは再開しておきます。
4.サンプルの実行
http://localhost/sample/page1.aspx にアクセスしてサンプルを実行します。
ボタンをクリックしてpage2.aspxも表示させ、実行してみましょう。
ページを2、3回切り替えれば十分です。
5.dll の取り出し
テンポラリフォルダから作成された dll を取り出します。
私の場合、
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\sample\89e3d426\d56660c7
というフォルダに 4syuycyc.dll が作成されました。
この 4syuycyc.dll を compiled\bin フォルダにコピーします。
なお、これらのフォルダ名、ファイル名は生成時にランダムにつけられます
ので、以下の記述中のファイル名等は、自分の環境で作成された名前に
読み替えるようにしてください。
6.クラス名の確認
ildasm を使って生成されているクラス名を確認します。
ildasm は C:\Program Files\Microsoft.NET\SDK\v1.1\Bin の下にあると思います。
このツールを起動して、4syuycyc.dll を表示してみてください。
_ASP というネームスペースの中に Page1_aspx、Page2_aspx という2つの
クラスが生成されているのがわかるかと思います。
7.Web.config の作成
compiled フォルダに以下の内容の Web.config ファイルを作成します。
------------------------------------------------
<configuration>
<system.web>
<httpHandlers>
<add verb="*"
path="Page1.aspx"
type="_ASP.Page1_aspx, 4syuycyc"/>
<add verb="*"
path="Page2.aspx"
type="_ASP.Page2_aspx, 4syuycyc"/>
</httpHandlers>
</system.web>
</configuration>
------------------------------------------------
ここに記述されている設定は、
- Page1.aspx という URL にリクエストがあったら、4syuycyc.dll に存在する_ASP.Page1_aspx クラスを呼び出す。
- Page2.aspx という URL にリクエストがあったら、4syuycyc.dll に存在する_ASP.Page2_aspx クラスを呼び出す。
という内容になります。
この設定があれば、Page1.aspx というファイルの実態は不要です。
8.動作の確認
http://localhost/compiled/page1.aspx にアクセスしてアプリケーションが実行できる
ことを確認してください。
○注意事項
- dll が複数生成された場合、どの dll の中にどのページのクラスが含まれているかの確認を慎重に行ってください。Web.config の設定は確認した内容に合わせてください。
- VS.NET で作成した Web アプリケーションでも同様の設定が可能だと思います。この場合、VS.NET が bin フォルダに生成する dll もコピーする必要があります。