资源文件通常是您的应用程序使用的任意非可执行的数据文件,如图像、音频和视频文件。资源文件在某些上下文中还可能具有特定的含义。例如,在应用程序本地化的上下文中,资源文件指代 .resx 文件,您可以在本地化的附属程序集中部署这些文件。
使用 Silverlight,您可以通过以下方式部署资源文件:
- 作为应用程序包中的单个文件。
- 作为按需检索的单个文件。
- 作为嵌入应用程序包的程序集中的文件。
- 作为嵌入外部库包的程序集中的文件。
- 作为程序集中嵌入的按需检索的文件。
一般通过统一资源标识符 (URI) 在代码或 XAML 中引用资源文件。所需的 URI 格式取决于部署文件的方式。您还可以选择指定相对或绝对 URI。
本主题介绍如何配置资源文件的部署位置并通过 URI 来引用资源文件。有关应用程序打包以及如何组织应用程序的结构以获得最佳响应效果的信息,请参见应用程序结构。有关部署和本地化的信息,请参见部署和本地化。
配置资源文件
在 Visual Studio 中,可以将资源文件添加到 Silverlight 项目并通过设置其"生成操作"值来为部署配置这些资源文件。可以为 Silverlight 项目中的资源文件使用以下生成操作:
- 资源:此生成操作会将文件嵌入项目程序集。您可以将此选项用于应用程序和库项目,并且在应用程序包的内部或外部部署这些程序集。
- 内容:此生成操作会将文件包含到应用程序包中,而不嵌入项目程序集。将此选项用于包中多个程序集共享的资源文件。
- 无:此生成操作不会将文件包含到应用程序包或程序集中。将此选项用于要按需检索的资源文件。通常在与应用程序包所在服务器位置相同的地方部署按需文件。
警告:
Visual Studio 中的"属性"窗口提供了"生成操作"下拉列表中的几个其他值。但是,您只能将前面三个值用于 Silverlight 项目。特别要注意的是,Silverlight 嵌入资源必须始终使用"资源"生成操作,而非"嵌入的资源"生成操作,后者使用 Silverlight 无法识别的格式。
如果决定共享嵌入的资源文件或按需检索它,可以更改生成操作。在这种情况下,必须重新生成和重新部署您的应用程序。如果没有使用相对 URI,还必须在重新生成前更新您的 URI 引用。以下各节对 URI 格式选项进行了说明。
说明:
通过 URI 引用字体文件时,必须在程序集中嵌入该字体文件并将 URI 语法用于嵌入的文件。有关更多信息,请参见 FontFamily 类概述。作为替代方案,可以设置各种控件都具有的 FontSource 属性。有关更多信息,请参见文本和字体。
使用通过 .NET Framework 版本 1.1 编译的资源文件将导致 NotSupportedException(如果这些文件包含 Boolean、 Char、Byte 或 Stream 类型)。
绝对和相对 URI
Silverlight 支持绝对和相对 URI,并通过使用相对 URI 提供用于查找文件的回退机制。
绝对 URI 指定资源文件的确切位置,绕过回退机制。例如,"http://www.contoso.com/resources/OnDemand.png"表示指定域中资源文件夹中的一个文件。如果资源文件所在的域不是应用程序包的宿主域,必须指定绝对 URI。
相对 URI 指定相对于应用程序根或引用 XAML 的资源文件位置。
相对于应用程序根的 URI
具有前导斜杠的相对 URI 表示相对于应用程序根的位置,例如"/resources/image.png"。
应用程序根是应用程序包的根文件夹或服务器上应用程序包的位置。相对 URI 回退机制首先搜索应用程序包,然后搜索服务器。如果在前导斜杠后包括路径,则在这两个位置中搜索相同的文件夹层次结构。
相对于引用 XAML 的 URI
不具有前导斜杠的相对 URI 表示相对于引用 XAML 的位置。如果您在代码中使用相对 URI,则引用 XAML 是您的代码操作的 XAML。
如果引用 XAML 位于文件夹中,可以引用相对于该位置的其他文件夹中的文件。但是,不能在应用程序根上进行搜索,例如"../resources/image.png"。此 URI 搜索包含 XAML 的文件夹所在级别上的资源文件夹,假定该文件夹不是应用程序根。
如果从应用程序包加载引用 XAML 但是未找到引用的资源文件,则使用默认回退机制。应用程序包中引用 XAML 的路径用于在服务器上搜索。例如,考虑应用程序包中以下位置的 XAML 文件:/pages/xaml/MyPage.xaml。在这种情况下,回退机制将在服务器上的以下位置搜索"../resources/image.png":/pages/resources/image.png。
如果将引用 XAML 编译为程序集,则必须在该同一程序集中嵌入资源文件。在这种情况下,URI 回退机制由 ResourceManager 类提供。此回退机制使用语言和区域性设置来查找附属程序集中的资源文件。有关更多信息,请参见本地化基于 Silverlight 的应用程序。
指向其他程序集的 URI
还可以引用嵌入某程序集的资源文件,该程序集不是包含引用 XAML 的程序集。在这种情况下,URI 使用以下格式:"/assemblyShortName;component/resourceLocation,例如"/SilverlightLibraryAssembly;component/image.png"。请注意,需要使用前导斜杠和 component 关键字(后跟一个斜杠)。
对于其他嵌入的资源,此 URI 格式使用 ResourceManager 类提供的回退机制。