Silverlight Assembly Caching

Posted on 2012-04-27 01:27  Metisria  阅读(311)  评论(2)    收藏  举报

从09年开始接触Silverlight,但一直未注意这样的文件*.extmap.xml,曾经看过里边的代码,但不知道有什么通途,也没考虑过Silverlight程序集大小问题。

去年下半年,公司拿到一个项目,副总说可以使用Silverlight开发,但客户的网络环境不会太好,系统用户分布在新疆、内蒙、东北、河北、甘肃、云南、广东、浙江等地,而且需要通过VPN连接到北京数据中心。

这样一来就不得不考虑xap大小就是个问题了,搜索了一些资料,看到几篇文章都说自定义程序集不可缓存,郁闷了,(Telerik的程序集可以缓存),经过一番测试终于解决自定义程序集缓存问题:


1.创建snk,提取key,以下是bat命令:

View Code
echo off
path %windir%\system32
attrib.exe -R %cd%\silverlight.toolkit.*
path "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin"
echo 创建 'silverlight.toolkit.snk' 文件.
sn -k silverlight.toolkit.snk
echo 提取 'silverlight.toolkit.snk' 文件中的公钥,写入 'silverlight.toolkit.pk' 文件.
sn -p silverlight.toolkit.snk silverlight.toolkit.pk
echo 将 'silverlight.toolkit.pk' 文件的公钥信息写入 'silverlight.toolkit.txt' 文件.
sn -tp silverlight.toolkit.pk>silverlight.toolkit.txt
path %windir%\system32
attrib.exe +R %cd%\silverlight.toolkit.*
attrib.exe -R %cd%\silverlight.toolkit.bat
echo 显示 'silverlight.toolkit.txt' 文件内容:
type silverlight.toolkit.txt
pause
echo on 

2.程序集强命名

  在项目的property中找到签名(Signing),然后浏览到snk

3.添加extmap.xml文件,该文件不做为内容,而是复制到输出目录

View Code
<?xml version="1.0"?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <assembly>
    <name>CGN.WP.ChinaMap</name>
    <version>5.0.5.0</version>
    <publickeytoken>7de63d8d9be81320</publickeytoken>
    <relpath>CGN.WP.ChinaMap.dll</relpath>
    <extension downloadUri="CGN.WP.ChinaMap.zip" />
  </assembly>
</manifest>

 

大约3个月后,在网上下载到了《Pro Silvelright 5 in C#》,其中第六章的 Downloading Assemblies on Demand 一节中提到了上述方式实现程序集缓存。

这本书应该早点翻译成中文,国产书...不够强劲,似乎就是几篇博客+MSDN简短示例,差距就是大啊。

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3