转自
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://ucc.alicdn.com/7sdymsyfcug7o/developer-article266881/20241016/9716d54e2bfa4e539d267dc77ebfc1e8.png?x-oss-process=image/resize,w_1400/format,webp)
分别有一个button,一个textblock,一个label,和一个DataGrid。
直接编译后,在web专案下的ClientBin内会产生xap档,
![](https://ucc.alicdn.com/7sdymsyfcug7o/developer-article266881/20241016/8773d09ad9284228adca3b10571cf6d6.png?x-oss-process=image/resize,w_1400/format,webp)
可以看出大小为221K,再用压缩程式看看内容
可以看出所有用到的组件都被包在一起,
接着我们选择专案的Properties,勾选Reduce XAP size by using application library caching
![](https://ucc.alicdn.com/7sdymsyfcug7o/developer-article266881/20241016/24a0370f19944ca7afb7ceddab4bf4da.png?x-oss-process=image/resize,w_1400/format,webp)
再次编译,得到以下的档案
![](https://ucc.alicdn.com/7sdymsyfcug7o/developer-article266881/20241016/c8b9ee9e7a82441db77f64a126eb3548.png?x-oss-process=image/resize,w_1400/format,webp)
可以看出xap变得很小,相关组件全都变成zip档,这些组件没有变更的话,
重新浏览网页就只需要下载5K的xap档。
因为这些组件是基本就有的,所以我们很容易可以分离他,若是想要分离自己的组件呢?
我们先随便加入一个Silverlight library的专案,然后再将此专案的dll引入这边我就加入一个TalkLib的专案
![](https://ucc.alicdn.com/7sdymsyfcug7o/developer-article266881/20241016/0b7662cd34c34053af15c0319123d3d8.png?x-oss-process=image/resize,w_1400/format,webp)
然后在TalkLib专案的Properties里设定Sign the assembly
![](https://ucc.alicdn.com/7sdymsyfcug7o/developer-article266881/20241016/49f3028c924041368fdbbde442563435.png?x-oss-process=image/resize,w_1400/format,webp)
取个好名字,这是放key的档案的名称,可以随便取。
接着记得重新编译Library专案,这样我们才能找到他的token
启动vs的命令提示工具
![](https://ucc.alicdn.com/7sdymsyfcug7o/developer-article266881/20241016/5501c16990ee43288429d6754205e0cb.png?x-oss-process=image/resize,w_1400/format,webp)
输入sn -T <组件完整路径与档名>
![](https://ucc.alicdn.com/7sdymsyfcug7o/developer-article266881/20241016/6ff979101f404f2c92ae40322e7b75f0.png?x-oss-process=image/resize,w_1400/format,webp)
记下他显示的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放在一起,所以这样做比较方便。
这样就大功告成了,编译后就会发现连我们自己的组件都脱离了~