用户打开同一SilverLight站点时,由于每次都要重新加载SilverLight应用程序包(.xap文件),因此会大大的降低用户体验。因此微软在SilverLight 3.0版本中提供了应用程序集缓存(Application Library Caching),可以解决这一缺陷。
应用程序集缓包括两个部分:
1、SilverLight本身的程序集缓存;
2、用户自定义程序集缓存。
第一种方式MSDN已经提到,只要在IDE设置一下即可
第二种方式操作时容易出错,具体例子如下:
假如项目引用的是库文件,如c:\project\ Microsoft.Windows.Controls.dll,那就在c:\project\ 目录下[不能在silverlight工程的bin\debug下]建立Microsoft.Windows.Controls.extmap.xml,具体内容参考如下:
<?xml version="1.0"?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<assembly>
<name>Microsoft.Windows.Controls</name>
<version>2.0.21027.1502</version>
<publickeytoken>31bf3856ad364e35</publickeytoken>
<relpath>Microsoft.Windows.Controls.dll</relpath>
<extension downloadUri="Microsoft.Windows.Controls.zip" />
</assembly>
</manifest>
假如项目引用的是依赖的库代码工程,如c:\project\demoLib(库必须强名),在demoLib工程中加一个内容内容demoLib.extmap.xml(这个名字和库输出的dll一致即可),然后选择输出到执行目录, demoLib.extmap.xml的内容和上面类似
多个库可以输出到一个压缩包中,只要各个组件的<extension downloadUri=填写一样的压缩名字就行
编译项目后,可以在ClientBin下看到以上设置的zip文件
可以使用Fiddle或HttpWatch查看请求的情况,可以看到,以上的zip文件都会缓存起来,xap文件显著减小,以后只要更新xap文件就行了