silverlight 使用應用程式庫快取,以減少 XAP 大小

silverlight 使用應用程式庫快取,以減少 XAP 大小

英文版vs2010稱作Reduce XAP size by using application library caching
主要的功能就是用到的組件分離成各個zip檔,使用者下載一次後,
重新再進入頁面時,若組件沒有變更的話就不用再次下載,
可以加快網頁開啟的速度,一般來說都會把不常改變的組件分離出來。
首先開一個silverlight application專案,在把一些比較大的組件加入,像是DataGrid。
為了簡單的實驗一下,就隨便拉幾個元件吧
測試畫面如下

分別有一個button,一個textblock,一個label,和一個DataGrid。
直接編譯後,在web專案下的ClientBin內會產生xap檔,

可以看出大小為221K,再用壓縮程式看看內容

可以看出所有用到的組件都被包在一起,
接著我們選擇專案的Properties,勾選Reduce XAP size by using application library caching

再次編譯,得到以下的檔案

可以看出xap變得很小,相關組件全都變成zip檔,這些組件沒有變更的話,
重新瀏覽網頁就只需要下載5K的xap檔。
因為這些組件是基本就有的,所以我們很容易可以分離他,若是想要分離自己的組件呢?
我們先隨便加入一個Silverlight library的專案,然後再將此專案的dll引入
這邊我就加入一個TalkLib的專案

然後在TalkLib專案的Properties裡設定Sign the assembly

取個好名字,這是放key的檔案的名稱,可以隨便取。
接著記得重新編譯Library專案,這樣我們才能找到他的token
啟動vs的命令提示工具

輸入sn -T  <組件完整路徑與檔名>

記下他顯示的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放在一起,所以這樣做比較方便。
這樣就大功告成了,編譯後就會發現連我們自己的組件都脫離了~