アプリケーションライブラリキャッシュ
XAPファイルの中にはXAMLやXAMLで参照している画像、アプリケーションの動作が記述されているDLLなど多くのファイルが圧縮されて格納されています。このためアプリケーションが拡大していくとXAPのファイルサイズが巨大になってしまい、XAPファイルのロードだけでもそれなりの時間がかかるようになってしまいます。
Silverlight 3からは、頻繁に使われるがあまり更新がないDLLに関してはビルドの際にXAPの外に追い出し、2度目以降のXAPのロード時に読み込み時間を短縮する仕組みが追加されています。
アプリケーションライブラリキャッシュを有効にするためには、次の2つの手順で作業を行う必要があります。
- プロジェクトのプロパティでアプリケーションライブラリキャッシュを有効にする
- キャッシュするアセンブリのアセンブリマップファイルを定義する
1. プロジェクトのプロパティでアプリケーションライブラリキャッシュを有効にする
アプリケーションライブラリキャッシュを利用するためには、Silverlightプロジェクトのプロパティで[アプリケーション ライブラリ キャッシュを使用して XAP を縮小する]にチェックを入れます(図3)。
ブラウザ外実行を利用する場合は注意が必要です。ブラウザ外実行の場合はすべての起動アセンブリが起動元のXAPファイルに含まれている必要があるため、ブラウザ外実行とアプリケーションライブラリキャッシュは同時に使用できません。Silverlightのプロパティ画面で[アプリケーション ライブラリ キャッシュを使用して XAP を縮小する]と[アプリケーションのブラウザ外実行を有効にする]の両方にチェックを入れようとすると、図4のダイアログが表示され両方を有効にすることができません。

2. キャッシュするアセンブリのアセンブリマップファイルを定義する
アセンブリをキャッシュさせたい場合は、キャッシュ対象のアセンブリの情報を記述したマッピングファイルをキャッシュさせたいアセンブリのプロジェクトに追加する必要があります。
マッピングファイルは「アセンブリ名.extmap.xml」とする必要があるので、例えば先ほどのアプリケーション拡張サービスで使ったアセンブリをキャッシュさせたい場合、マッピングファイル名は「FrameworkSample.extmap.xml」となります。
リスト7にマッピングファイルのサンプルを示します。
<?xml version="1.0" encoding="utf-8" ?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<assembly>
<name>FrameworkSample</name>
<version>1.0.0.0</version>
<publickeytoken>*</publickeytoken>
<relpath>FrameworkSample.dll</relpath>
<extension downloadUri="FrameworkSample.zip" />
</assembly>
</manifest>
アセンブリの名前やパブリックキートークンなどは、Reflectorなどの逆アセンブルツールを使うと簡単に確認できます(図5)。

マッピングファイルはDLLと同じフォルダに配置する必要があるので、FrameworkSample.extmap.xmlのプロパティで出力ディレクトリにコピーの値を[常にコピーする]に変更しておきましょう(図6)。

これで準備は終了です。実際にVisual Studioから実行してみてください。
SilverlightをホストしているWebプロジェクトのClientBinディレクトリーに、通常のXAPファイルとは別に、アプリケーションアセンブリキャッシュとして外に出したアセンブリがアセンブリ名.zipとしてコピーされたのを確認できると思います(図7)。

まとめ
いつの間にか第8回まで来てしまった本連載ですが、Silverlight 4のリリースに伴いいったん今回で終了となります。Silverlight 3の新機能が思ったよりもボリュームがあったのも手伝って、全編を通してかけ足になってしまった気がしますが、どうだったでしょうか。少しでも皆さんのSilverlight開発のお役に立てたのであれば嬉しいです。

