当您使用应用程序库缓存时,Silverlight 将某些程序集打包成应用程序包外部的外部部件(.xap 文件)。应用程序包中的清单指定启动时所需的程序集,并指示它们是在应用程序包的内部还是外部。
当用户首次访问您的网页时,Silverlight 插件下载应用程序包以及所有需要的外部部件。这些文件添加到浏览器缓存中,以便可以在后续访问时再次使用。
所有下载的文件都受服务器和浏览器中的缓存配置设置约束。在典型的配置中,仅当文件不在缓存中或它们比缓存的版本更高时,才下载这些文件。
库程序集的更改机会远小于应用程序程序集。因此,将它们作为单独的文件进行缓存非常重要。这样,当您更改应用程序代码而非库代码时,许多回访者将只下载 .xap 文件。
Silverlight 随 Silverlight SDK 提供了许多库,而它们不是运行时的组成部分。这些库已预配置为用于应用程序库缓存。在 Visual Studio 中,这些库与运行时程序集一起位于"添加引用"对话框的".NET"选项卡上。还可以从 Silverlight SDK 文件夹访问它们。默认情况下,Silverlight SDK 安装在 %ProgramFiles%/Microsoft SDKs/Silverlight 文件夹中。还可以配置自己的程序集,以便支持应用程序库缓存。
下面的过程介绍如何启用和使用应用程序库缓存,以及如何配置自己的程序集进行缓存。
启用应用程序库缓存
-
在"解决方案资源管理器"中,选择要为其启用库缓存的 Silverlight 应用程序项目。
-
将显示项目设计器。
-
在"Silverlight"选项卡上,选择"使用应用程序库缓存减少 XAP 大小"。
说明: -
添加对于 Silverlight SDK 中某个库程序集的引用,或者添加对于由有效的 assemblyShortName.extmap.xml 映射文件伴随的任何程序集的引用。
这会导致发生以下操作:
将程序集配置为用于应用程序库缓存
-
在程序集所在的相同位置创建一个映射文件。此文件必须与程序集同名,而将 .dll 文件扩展名替换为".extmap.xml"。例如,Silverlight SDK 程序集 System.Json.dll 具有名为 System.Json.extmap.xml 的映射文件。
-
按下面示例中所述将配置数据添加到映射文件中,并替换程序集元素中的值以与程序集匹配。
复制代码
System.Json 2.0.5.0 31bf3856ad364e35 System.Json.dll name、version 和 publickeytoken 元素必须与对应的程序集元数据相匹配。relpath 元素指示程序集文件名。最后,extension 元素通过 downloadUri 属性指示打包的外部部件的名称。
downloadUri 属性 (Attribute) 值用于填充应用程序清单中的 ExtensionPart..::.Source 属性 (Property),如下面的清单摘要中所示。
复制代码
如果 downloadUri 值是一个文件名,则当您添加对程序集的引用时,Visual Studio 提供以下支持:
如果 downloadUri 是一个绝对 URI,生成系统将不会对程序集打包。而是由您负责压缩程序集并将其部署到指定的 URI。这可用于创建由多个应用程序使用的库的单一存储库。但是,当您使用绝对 downloadUri 值时,应考虑以下问题。
在 Visual Studio 中测试应用程序库缓存
-
下载并安装 HTTP 通信监视器,例如,Fiddler。这样,您就可以查看 HTTP 请求和响应,并验证是否未下载缓存的文件。
-
打开下面的 Windows 功能:
-
Internet 信息服务 (IIS)
-
IIS 元数据库和 IIS 6 配置兼容性
-
ASP.NET
-
Windows 身份验证
IIS 是必需的,因为 Visual Studio 开发服务器在其 HTTP 响应标头中不启用缓存。
-
-
在包含 Silverlight 项目的解决方案中,加入用于测试的 Web 项目。
-
将 Web 项目配置为使用 IIS,并从 HTTP 通信监视器中启用 localhost 监视。(例如,fiddler 提供了一个代理 URL,您可以用它来替换"启动 URL"值中的"localhost"。)
-
执行以下操作并观察产生的 HTTP 通信:
在初始下载之后,对于应用程序包和库文件的其他请求将不会生成附加的下载通信。而是请求由缓存的副本完成。但是,当您重新生成应用程序时,将检测到更改并且下载新副本。
参考
其他资源
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。