在您使用托管的 API 创建基于 Silverlight 的应用程序时,生成过程将生成一个应用程序包。应用程序包是一个压缩 (zip) 文件,它具有 .xap 文件扩展名。此文件通常包含您的主要应用程序程序集和资源。它还包括内部版本生成的清单,该清单描述此应用程序并指定它在启动时需要的所有程序集。这些程序集可以在应用程序包内部或外部。
当您在某一网页中嵌入 Silverlight 插件时,指定该插件应下载的应用程序包。该插件在该应用程序包中使用一个清单文件来标识要实例化的应用程序类。此类称为您的应用程序的"入口点",并且它必须从 Application 类派生。
如果您使用应用程序库缓存,则清单还指示所需的哪些程序集是在应用程序包外部。此插件将检索所有此类文件。对于已本地化的应用程序,该插件还将为所有所需的内部和外部程序集检索特定于区域性的附属程序集。有关更多信息,请参见部署和本地化。
Application 类提供一个 Startup 事件,您可以处理该事件以便初始化您的应用程序及其用户界面。Application 类还提供其他常用的应用程序服务。例如,您可以使用它来从应用程序包或从下载的 zip 文件提取资源文件。有关更多信息,请参见应用程序服务。您也可以添加自定义应用程序服务。有关更多信息,请参见应用程序扩展服务。
下载应用程序启动文件并实例化应用程序类的过程称作 Silverlight 激活系统。通过该激活系统,您可以指定一个或多个包的最少初始下载以优化缓存。在激活后,您的应用程序可按需检索附加的库程序集和资源文件。
本主题介绍应用程序包结构。它还说明在应用程序包内部署文件的选项(所需但处于外部的部分或需要的文件)。
有关如何创建应用程序的信息,请参见如何创建新 Silverlight 项目。有关在网页内承载应用程序的信息,请参见将 Silverlight 与网页集成。
应用程序包
一个应用程序包包含以下文件:
-
一个 AppManifest.xaml 文件,它标识打包的程序集和应用程序入口点。
-
一个应用程序程序集,它包括您的应用程序类。
-
零个或多个库程序集。
-
零个或多个松散资源文件,例如图像文件或视频文件。
该 AppManifest.xaml 文件通常由生成过程生成,并且使用 XAML 标记来为您的应用程序声明 Deployment 对象。
在 AppManifest.xaml 文件中,Deployment 元素包括以下属性:
-
一个 RuntimeVersion 属性,用于标识所需的 Silverlight 版本。
-
EntryPointType 和 EntryPointAssembly 属性,用于标识应用程序入口点。
Deployment 元素还包括一个子 Deployment..::.Parts 属性元素,它为应用程序包中的每个程序集都具有一个子 AssemblyPart 元素。
如果您使用应用程序库缓存,Deployment 元素还可能包含一个子 Deployment..::.ExternalParts 属性元素。如果您添加了对于配置用于应用程序库缓存的库程序集的引用,则此元素存在。Deployment..::.ExternalParts 属性元素对于每个外部库包都具有一个子 ExtensionPart 元素。
该应用程序包必须包含一个 AppManifest.xaml 文件和一个入口点应用程序程序集。您可以将所有其他应用程序组件部署为"打包"文件、ExternalPart 文件或"按需"文件。
打包文件是在应用程序包中包括的文件。您通常包括应用程序在启动时所需的主要文件或者为避免启动后的延迟而必须可用的文件。还可以包括图像之类的共享资源,这些资源可嵌入在程序集中或作为应用程序包内的单独文件提供。
ExternalPart 文件是 zip 文件,其中包括应用程序启动时所需的一个或多个程序集。这些通常是库程序集,它们的更改机会小于主要应用程序文件。您可以通过在单独的下载中考虑这些因素来改进缓存效率。有关更多信息,请参见如何使用应用程序库缓存。
按需文件是在服务器上部署的文件,通常与应用程序包处于同一位置。您的应用程序可以在激活后检索这些文件。根据文件类型和大小,存在若干用于检索按需文件的选项。例如,您可以使用直接 URI 引用来检索图像文件,或者可以开始异步下载以检索库程序集或 zip 文件。有关更多信息,请参见下一节。
下图汇总了用于您的应用程序文件的应用程序包结构和部署选项。
打包、作为外部部分或按需部署文件
您通常在决定下载和启动时间不可接受前在应用程序包内部署所有应用程序文件。此决定取决于应用程序的要求。例如,您可以在应用程序包内包括任意数目的文件,异步改进启动后的响应。在此情况下,可以通过提供初始屏幕在初始下载期间维护响应。有关更多信息,请参见 Silverlight 初始屏幕。
您可以使用应用程序库缓存来减少应用程序包的大小。然而,这不会减少初始下载时间,它实际上会由于其他网络请求而导致下载时间增加。应用程序库缓存的优势在于您可以更改应用程序代码,而不要求回返者下载未更改的库程序集。
在某些情况下,Silverlight 插件将无法加载非常大的应用程序包。在您创建较大的应用程序时,应通过使用应用程序库缓存或按需检索某些文件,尽量降低应用程序包的大小。
在您决定将某些文件移出应用程序包时,有若干选项可供重新部署。
最容易重新部署的文件是使用相对 URI 引用的文件,例如图像文件或视频文件。当 Silverlight 插件在代码或 XAML 中遇到相对 URI 时,它会首先在应用程序包中进行查找。如果该插件在应用程序包中找不到相应文件,则会在主机服务器上进行查找。这意味着,您无需要求代码更改就可以移动按相对 URI 引用的任何文件。有关更多信息,请参见资源文件。
许多文件类型不能按 URI 引用,并且在您将它们重新部署为按需文件时要求特殊处理。例如,如果您重新部署某一库程序集,则必须添加按需检索它的代码,并且将其加载到应用程序域中。有关更多信息,请参见如何按需加载程序集。在这种情况下,您仍必须在应用程序项目中引用该程序集,但应将"复制本地"值设置为"False"。这可防止内部版本将该程序集添加到应用程序包或在启动时要求该程序集(例如,ExternalPart 程序集)。
您还可能要将若干相关资源文件移出您的应用程序包,但按需将它们检索为单个下载。您可以通过将它们捆绑到在服务器上部署的某一 zip 文件中,执行上述操作。然后,必须添加按需检索该 zip 文件并提取其内容的代码。有关更多信息,请参见按需下载内容。
请参见