| 2003年5月22日
『どっとねっとと雑多な日々 5』
先月から講演をしたり、社内で .NET Framework 案件の調整をしたりと無茶がたたって、しばらくシステムダウンしていました。
さて、今回は pml-web のセミナーで講演をした内容の一部をご紹介したいと思います。
.NET Framework アプリケーションの配布には 3 通りの方法があります。
1. XCopy で丸ごとコピーして配布する方法
2.セットアッププロジェクトからセットアップモジュールを作成し、それを
配布する方法
3. http(s) での配布する方法
1. のコピーしただけで動くというのは .NET Framework はレジストリに依存しないようになってためで、生成されたアセンブリ(
exe や dll など)はシステムに登録しなくても動作するようになっているためです。
※場合によってはレジストリに登録しなければならないものもありますが通常の Windows Form アプリケーションや Console
アプリケーションであればレジストリの登録は必要ありません。
2. のセットアッププロジェクトは Visual Studio .NET などで作成できるもので、.NET Framework
SDK だけでは利用できません。
※いわゆる Setup.exe を生成するものです。
3. が今回紹介したい配布の方法です。
具体的に書きますと、まず .NET Framework 用のアプリケーションを作成します。
ex.Hello.cs
---------------------------------------------------------------------
using System;
namespace Sample
{
class Hello
{
[STAThread]
static void Main(string[] args)
{
Console.Write("Hello World!!");
}
}
}
---------------------------------------------------------------------
Hello.cs をコンパイルします。
コマンドプロンプトから CSC.exe でコンパイルします。
C:\>csc Hello.cs
すると C ドライブ直下(この場合)に Hello.exe が生成されますので、生成したファイルを C:\Inetpub\wwwroot
にコピーします。
※ IIS の「既定の Web サイト」のルートディレクトリが別に設定されている場合はそのディレクトリにコピーします。また、IIS
の「既定の Web サイト」のプロパティ(IIS の管理ツールから)で「ホーム ディレクトリ」の「実行アクセス権」が「なし」か「スクリプトのみ」になっていることを確認してください。
コピーができたらブラウザを起動して
http://localhost/Hello.exe
と入力してください。
こうすることで、生成された実行ファイルがダウンロードされて、実行されることが確認できると思います。
これが実行できるのは、 .NET Framework のランタイムがインストールされている必要がありますが、その他に .NET
ウィザードの「アセンブリの信頼」に登録されている必要もあります。
※ localhost は信頼されているため必要がありませんが、他のサイトを指定する場合、必要です。
GUI での設定は
[スタート]
[コントロールパネル]
[管理ツール]
[Microsoft .NET Framework ウィザード]
[アセンブリの信頼]
をクリックします。
するとウィザード形式で設定画面が出てきますので、問い合わせに答えていけ
ば設定できます。
さて、ここからが問題です。
http での配布だと毎回ダウンロードされるのか?という疑問があります。
その答えとしては
.NET Framework には Global Assembly Cache というアセンブリのキャッシュ
する領域があります。
※ %SystemRoot%\assembly がそうです。
この領域には Download という別のフォルダがあります。
http で配布されたものはすべてこちらのフォルダに格納されます。
Explorer からでも確認できますが、コマンドでも確認することができます。
C:\>gacutil.exe /ldl
ダウンロードされるかされないかは、( http の URL から)実行時にアセンブリの日付とアセンブリのバージョンを比較し、新しければダウンロード、同じであればキャッシュから実行するというようになっています。
※ http からの実行はネットワークに接続していなければならないという前提があります。
となります。
最後に、GAC のキャッシュがいっぱいになったときやサイズの拡張をしたい場合などはどうなっているのという疑問もありますが、この件については現在問い合わせ中ですので、わかり次第またコラムに書きたいと思います。
|