最早使用 IsolatedStorageFile 类缓存 Silverlight 程序. 以便下次打开速度变快.  某天偶尔发现 VS 的 SL 项目属性中. 有此选项.

image , 于是上网找找资料. 做了个例子试试. 结果很明显. 400多k 的 xap 文件 被分离成多个. 最后的 xap 文件只有14k 大小.

 

特将此 demo 的制作过程记录下来, 以备查阅.

 

1. 项目结构如下:

 image

2. 首先编译. 查看生成的 Xap 文件大小. image  452KB.

3. 打开 PEMS.Sl.UI  SL 项目的属性页面. 将image 选中.

4. 编译解决方案. 查看新的结果.

image

生成后. Navigation. Controls. Linq 三个动态链接库被单独打包为 zip格式. 存放与 ClientBin 下. 这样. 客户端在使用到的时候. SL 会为你自动下载.

由于我的 PEMS.Sl.UI 项目使用到了 PEMS.Sl.Controls 与 PEMS.Common.Model 项目. 我也需要让这两个项目变得与 Navigation. Controls. Linq 它们相同. 下面详细说明.

改造 PEMS.Sl.Controls 与 PEMS.Common.Model 项目.

1. 将 PEMS.Sl.Controls 与 PEMS.Common.Model 它们生成为强类型动态链接库.

1. 使用 VS 工具 sn 产生key.

sn –k key.snk

sn –p key.snk key.public.snk

sn –t key.public.snk  查看到的 public token 记下. 稍后有重要作用

2. 在 PEMS.Sl.Controls 项目属性中产生一个key.

image

3. 在 AssemblyInfo.cs 文件中添加 [assembly: AssemblyKeyFile("key.public.snl")]
image 

 

4. 在项目中创建一个 AssemblyName.extmap.xml 文件. 我这里叫做 PEMS.Sl.Controls.extmap.xml

此文件内容为:

 

1 <?xml version="1.0"?>
2 <manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3           xmlns:xsd="http://www.w3.org/2001/XMLSchema">
4   <assembly>
5     <name>PEMS.Sl.Controls</name>
6     <version>1.0.0.0</version>
7     <publickeytoken>55a4a48c2765ae41</publickeytoken>
8     <relpath>PEMS.Sl.Controls.dll</relpath>
9     <extension downloadUri="PEMS.Sl.Controls.zip" />
10   </assembly>
11 
12 </manifest>

在你的项目中替换相关的值就可以了. 更改此 XML 文件的属性. 更改为总是拷贝至输出目录

PEMS.Common.Model 同 PEMS.Sl.Controls 项目相同设置.

现在重新编译试试看.

image

PMES.Common.Model 同 PEMS.Sl.Controls 都被打成 zip 包了.

现在看看 PEMS.Sl.UI.xap 多大.

image

由最初的 452KB. 变为 210 KB. 其他均为动态下载

posted on 2009-10-16 15:15  Hacker-TTAO  阅读(850)  评论(6编辑  收藏  举报