从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简短示例,差距就是大啊。
【理论指导实践,实践完善理论;站在巨人的肩上就是先学习理论再来实践!】

浙公网安备 33010602011771号