讨论 Silverlight 4 中应用程序库缓存的步骤






4.93/5 (22投票s)
讨论 Silverlight 4 中应用程序库缓存的步骤
引言
有时,您的 Silverlight 应用程序会变得过大,生成一个更大的 XAP 文件。这会在首次加载 XAP 文件时导致问题,因为它会增加下载 XAP 的加载时间。那么,在这种情况下您会怎么做?有一个答案:将您的应用程序拆分为多个项目,这将生成多个 XAP,然后使用“按需下载”功能。
完全正确,但有时您可能会包含第三方程序集引用。在这种情况下,将它们存储在单独的 XAP 中并编写按需下载它们的代码会非常繁琐。那么,有什么简单的过程呢?在本文中,我们将学习相同的内容。请继续阅读以了解更多信息,如果您需要更多信息,请提供您的反馈。
程序集缓存并不是 Silverlight 4 中的新事物。它自 Silverlight 3 起就已存在。今天,我得到了一个机会深入研究它,并想与您分享更详细的信息。
那么,什么是应用程序库缓存?我们都知道 XAP 的按需下载。为此,我们需要编写代码使用 WebClient
下载外部 XAP 文件。应用程序库缓存会非常轻松地为您完成类似的事情。假设您有一个较大的应用程序并使用了大量的第三方库,这个简单的步骤将帮助您将它们与它们一起打包到一个单独的 zip 文件中,而无需编写任何额外代码即可按需下载。
许多人对此并不了解,因此让我们从此处开始描述。
步骤 1 - 深入 XAP 内部
首先,我们将创建一个小的 Silverlight 应用程序项目。为此,请打开您的 Visual Studio 并创建它。

项目创建完成后,在解决方案资源管理器中,您会看到它包含一些对程序集文件的默认引用。生成项目后,它将为您创建一个 .XAP 文件。这是同一张截图

您可以看到它在客户端 bin 目录中创建 XAP 文件。无论项目引用了多少程序集文件,它都会创建一个 XAP,而不必要地增加了 XAP 文件的大小,无论它是否需要这些文件。
要查看 XAP 内部的内容,请转到 ClientBin 文件夹。在那里,您将找到 Silverlight 应用程序的 XAP 输出。

正如大家所知,所有 XAP 文件不过是一个 ZIP 文件,因此您可以通过重命名其扩展名轻松将其转换为 Zip 文件。

打开 ZIP 文件。在里面,您将找到“AppManifest.xaml”(它存储引用程序集的信息)、项目的 DLL 输出以及所有其他引用的程序集。如果您在解决方案中添加了更多第三方程序集引用,此列表将增加。

要了解详细信息,请在文本编辑器中打开 AppManifest.xaml 文件。看下面的截图

您会注意到它具有作为 Assembly part、entry point 和 required runtime version 的所有引用的 DLL 信息。Assembly parts 指示直接从 XAP 加载引用的程序集。
步骤 2 - 使用更多程序集
想象一下我们在第一步中演示的内容。现在,我们将向我们的项目添加一些额外的 DLL 引用。为此,右键单击您的项目并单击“添加引用”。然后从添加引用对话框中,选择一些第三方 DLL 并将它们包含在您的项目中。
作为演示,我们将向我们的解决方案添加一些主题 DLL。为此,搜索“theme”,您将在添加引用对话框中看到主题 DLL 的列表。选择其中一些并添加到项目中。

添加它们后,您会注意到选定的程序集现在是您项目的一部分(参见下图)

现在,生成您的解决方案并打开新的 XAP 文件(将其重命名为 ZIP)。您会看到所有新的引用的 DLL 现在都是您的 XAP 的一部分。请看下面的截图,它将为您提供更好的信息

让我们打开“AppManifest.xaml”看看它现在包含什么。哇,它包含了所有其他 DLL 条目作为 AssemblyPart
,并指示从 XAP 本身加载它们。

这实际上增加了 XAP 的大小,并使您的应用程序有点臃肿。因此增加了应用程序的初始加载时间。
步骤 3 - 使用应用程序库缓存
为了克服这一点,让我们现在更改项目的设置以使用应用程序库缓存功能。转到您的项目属性面板。在 Silverlight 选项卡中,您会找到一个名为“通过使用应用程序库缓存减小 XAP 大小”的复选框。选中它,如下所示

现在再次生成您的项目,您将看到它将生成尽可能多的 .ZIP 文件,作为外部程序集的计数。您还会注意到它为每个引用的 DLL 程序集创建一个单独的 zip 文件。

让我们深入了解应用程序清单。转到 output 目录“ClientBin”。您将看到一个 XAP 文件,下面显示了许多 ZIP 文件

这里的每个 ZIP 文件包含一个 DLL 文件。重命名并打开 XAP 文件。从 XAP 中打开 AppManifest.xaml。

在这里,您会注意到一个 AssemblyPart
指向您的原始项目输出,其余的 DLL 引用已移至 ExternalParts
。它们现在指向 Zip 文件而不是实际的 DLL。
现在,当您运行应用程序时,它只会下载包含主要资源的 XAP 文件。其余的 DLL ZIP 将在应用程序需要时按需下载。
希望这些信息能帮助您理解 Silverlight 的库缓存功能,并为您提供在应用程序中使用它的机会。如果您需要更多信息,请告诉我。
历史
- 2011 年 3 月 14 日:初始版本