当用户重新访问网站时,Application library caching能够提高启动性能,当用户第一次访问网页的时候,Silverlight插件下载应用程序包和所有的外部程序集,这些文件会被加入到浏览器缓存中,以便在后续的访问中能够重用这些文件,关于Application library caching的详细介绍,可以参考下面的文档:http://msdn.microsoft.com/en-us/library/dd833069(v=vs.95).aspx
如果在实际项目中启用了Application library caching,并将多个公用程序集打包到一个ZIP包中,那么这些程序集必须被同时引用,否则就会出现意想不到的bug,可参考如下引用不同步出现bug的例子:
假设同一个解决方案下有如下两个Silverlight工程:A和B,这两个工程都启用了Application library caching,都引用了程序集AS1、AS2,工程A还额外引用了程序集AS3,AS1、AS2、AS3三个程序集都被配置为打包到Common.zip中,如下图:
当Build解决方案时:
- 如果Build顺序是A、B,即先Build工程A,生成的Common.zip中包含AS1、AS2、AS3三个程序集,在Build工程B,生成的Common.zip中只包含AS1、AS2两个程序集,最终网站ClientBin目录下Common.zip中只包含程序集AS1、AS2,如果此时运行解决方案,加载工程A时,就会出现程序集AS3无法加载的异常
- 如果Build顺序为B,A,即先Build工程B,生成的Common.zip中只包含程序集AS1、AS2两个程序集,在Build工程A,生成的Common.zip中包含程序集AS1、AS2、AS3三个程序集,最终网站ClientBin目录下Common.zip中包含程序集AS1、AS2、AS3,如果此时运行解决方案,加载工程A和工程B都是没有问题的
如此依赖Build顺序的行为将产生很多不确定性,出现意想不到的bug;究其原因是我们将不能同步引用的程序集打包到了同一个ZIP包导致的,因此在配置程序集的Application library caching时,只有保证两个程序集能够被同步引用时,才可以打包到同一个ZIP包中,否则都应该打包到单独的ZIP包中;另外,很难确保能同步引用两个程序集,建议最好将每个程序集都打包到单独的ZIP包中