转自
http://www.dotblogs.com.tw/help/archive/2010/07/22/16705.aspx
英文版vs2010称作Reduce XAP size by using application library caching
主要的功能就是用到的组件分离成各个zip档,使用者下载一次后,
重新再进入页面时,若组件没有变更的话就不用再次下载,
可以加快网页开启的速度,一般来说都会把不常改变的组件分离出来。
首先开一个silverlight application专案,在把一些比较大的组件加入,像是DataGrid。
为了简单的实验一下,就随便拉几个元件吧测试画面如下
![](https://i-blog.csdnimg.cn/blog_migrate/090966bd2f18223dc3126597af7047fc.png)
分别有一个button,一个textblock,一个label,和一个DataGrid。
直接编译后,在web专案下的ClientBin内会产生xap档,
![](https://i-blog.csdnimg.cn/blog_migrate/1baffc450e353b3762ffb97194fee95f.png)
可以看出大小为221K,再用压缩程式看看内容
可以看出所有用到的组件都被包在一起,
接着我们选择专案的Properties,勾选Reduce XAP size by using application library caching
![](https://i-blog.csdnimg.cn/blog_migrate/9aa35dc6a75d3fc65f382cf927c9a705.png)
再次编译,得到以下的档案
![](https://i-blog.csdnimg.cn/blog_migrate/8de806d6f421ed524819a81b71c1c54a.png)
可以看出xap变得很小,相关组件全都变成zip档,这些组件没有变更的话,
重新浏览网页就只需要下载5K的xap档。
因为这些组件是基本就有的,所以我们很容易可以分离他,若是想要分离自己的组件呢?
我们先随便加入一个Silverlight library的专案,然后再将此专案的dll引入这边我就加入一个TalkLib的专案
![](https://i-blog.csdnimg.cn/blog_migrate/4b0a7095ca90126297e3de6e963dfafd.png)
然后在TalkLib专案的Properties里设定Sign the assembly
![](https://i-blog.csdnimg.cn/blog_migrate/1d7ef49d63ab58dc1d138592c3b6c2c5.png)
取个好名字,这是放key的档案的名称,可以随便取。
接着记得重新编译Library专案,这样我们才能找到他的token
启动vs的命令提示工具
![](https://i-blog.csdnimg.cn/blog_migrate/2a7508b0ca67ef4f290be4181116d956.png)
输入sn -T <组件完整路径与档名>
![](https://i-blog.csdnimg.cn/blog_migrate/62082537456f2af228d51dd169baabca.png)
记下他显示的Token号码。
这边特别注意一点,要是你的组件里面参考到别的组件,被参考的组件也要是可以分离的才行!
接着再TalkLib专案新增一个xml档案,名称必须为"组件名称.extmap.xml",
此例就是TalkLib.extmap.xml。 内容如下:
1: <? xml version ="1.0" encoding ="utf-8" ? >
2: < manifest xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
3: xmlns:xsd ="http://www.w3.org/2001/XMLSchema" >
4: < assembly >
5: < name > TalkLib </ name >
6: < version > 1.0.0.0 </ version >
7: < publickeytoken > 31bf3856ad364e35 </ publickeytoken >
8: < relpath > TalkLib.dll </ relpath >
9: < extension downloadUri ="TalkLib.zip" ></ extension >
10: </ assembly >
11: </ manifest >
内容分别是组件名称、版本编号、token、组件档案全名、下载档案名称。
其中最重要的就是downloadUri,不可以打错,其他好像乱打都可以
然后设定此档案的properties,让他cpoy到local。
因为此xml档案必须和dll放在一起,所以这样做比较方便。
这样就大功告成了,编译后就会发现连我们自己的组件都脱离了~