silverlight自定义程序集缓存
在上一篇中提到silverlight可以将一些程序集缓存。不过默认情况下,在silverlight中自定义的程序集不支持程序集缓存。但是,你可以通过满足两个条件而让它支持。
首先,自定义程序集必须有一个强名称(strong name)。 项目中需要用到一个叫做C的类库,如图
为C创建强名称密钥,有以下几个步骤:
1.右键单击C项目,选择属性
2.点击签名选项卡
3.选择为程序集签名选项
4.在选择强名称密钥文件下来菜单中,选择新建选项弹出创建强名称密钥窗口
弹出的窗口
5.在弹出的窗口中输入文件名称(比如C,不一定非和程序集名称相同),密码可以选择也可以不选。
6.点击确定,visual studio 会创建一个key文件并添加到项目下,如图中C.snk便是创建的key文件
从现在开始,每次编译项目时,visual studio都会用这个key为程序集签名。光有这个key还不行,还需要知道为你程序签名的key的公钥(public key token),这时需要用到Visual Studio自带的签名工具。
在程序中打开Visual Studio 2010,选择Visual Studio Tools,然后Visual Studio命令提示
运行以下命令
sn -p H:\Jerry\Person\Demo\SLApplicationModel\C\C.snk C.bin
sn -t C.bin
红色部分表示你的key的绝对路径;C.bin表示程序的bin文件夹
命令完成后会看到一下内容
其中的公钥标记后边的一串数字是在下边要用到。
第二 创建一个描述自己内容的后缀为.extmap.xml的XML文件
.extmap.xml就是普通的XML文件,但它的名称需要和你的程序集名称相一致。比如,程序集叫C.dll,需要创建一个叫C.extmap.xml的XML文件。这个文件告诉silverlight此程序集支持程序集缓存。
C.extmap.xml内容
<?xml version="1.0"?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<assembly>
<name>C</name>
<version>1.0.0.0</version>
<publickeytoken>6f2ff986d4bcb927</publickeytoken>
<relpath>C.dll</relpath>
<extension downloadUri="C.zip" />
</assembly>
</manifest>
name和version和你的程序集相匹配;publickeytoken就是上边产生的那一串数字;relpath是程序集的全称.
downloadUri提供了最重要的信息------告诉程序在哪里寻找已经打包好的DLL。通常有两种选择,最简单的方法就是上边用到的:提供一个文件名称。当在silverlight中使用程序集缓存时,Visual Studio会找到程序集,压缩它并且和XAP包放一块。这是silverlight内置程序集使用的方法。
另一个选择是使用绝对的URI,比如
<extension downloadUri="http://www.cnblogs.com/HellenTian/C.zip"/>
用这种方法Vistual Studio将不会打包你的程序集,但是需要自己提前打包好放在silverlight程序的目录下。这在多个程序之间实现共享时十分方便。但是,下载路径必须是在和程序相同的域名下或是允许跨域访问的其他站点下。
现在在项目SLApplicationModel中调用这个程序集,并选择程序集缓存,最后编译项目。查看Bin\Debug目录,会看到C.ZIP