将资源生成到应用包而不是资源包中
(多语言字典、翻译工具等的某些类型的应用) 需要替代应用程序包的默认行为,并将资源构建到应用包中,而不是将它们放在单独的资源包 (或资源包中) 。 本主题介绍了如何执行该操作。
默认情况下, (.appxbundle) 生成应用程序包 时,只有语言、缩放和 DirectX 功能级别的默认资源才会内置到应用包中。 已翻译的资源(以及针对非默认缩放和/或 DirectX 功能级别定制的资源)内置在资源包中,并且仅下载到需要它们的设备上。 如果客户使用语言首选项设置为西班牙语的设备从 Microsoft Store 购买应用,则只下载并安装应用和西班牙语资源包。 如果同一用户稍后在设置中将他们的语言首选项更改为法语,则将下载并安装应用的法语资源包。 符合缩放和 DirectX 功能级别的资源的情况也类似。 对于大多数应用,此行为构成了宝贵的效率,而这正是你和客户 想要 实现的。
但是如果应用支持用户在应用中即时(而不是通过设置)更改语言,则该默认行为并不适合使用。 你实际上希望无条件下载所有语言资源并随应用一次性安装,然后将它们保留在设备上。 你希望将所有这些资源构建到应用包而不是单独的资源包。
注意:将资源包含在应用包中本质上增加了该应用的大小。 正因如此,只有应用的性质要求时才值得执行此操作。 如果没有要求,除了像往常一样构建常规的应用程序包之外,无需执行任何操作。
可以配置 Visual Studio 以通过以下两种方式之一将资源构建到应用包。 可以将配置文件添加到项目,也可以直接编辑项目文件。 使用你最熟悉的这些选项中的哪一个或最适合你的生成系统的选项。
选项 1. 使用 priconfig.packaging.xml 将资源构建到应用包
- 在 Visual Studio 中,将新项添加到项目。 选择 XML 文件,并将该文件命名为
priconfig.packaging.xml
。 - 在“解决方案资源管理器”中,选择
priconfig.packaging.xml
并检查“属性”窗口。 文件的“生成操作”应设置为 None,“复制到输出目录”应设置为“不要复制”。 - 将文件的内容替换为此 XML。
<packaging> <autoResourcePackage qualifier="Language" /> <autoResourcePackage qualifier="Scale" /> <autoResourcePackage qualifier="DXFeatureLevel" /> </packaging>
- 每个
<autoResourcePackage>
元素会告知 Visual Studio 将给定限定符名称的资源自动拆分为单独的资源包。 这称为自动拆分。 就目前拥有的文件内容来说,实际上尚未更改 Visual Studio 的行为。 换句话说,Visual Studio 的行为就像 此文件存在这些内容一样,因为这些内容是默认值。 如果不希望 Visual Studio 自动拆分限定符名称,请从文件中删除该<autoResourcePackage>
元素。 如果希望将所有语言资源都构建到应用包,而不是自动拆分为单独的资源包,文件的内容应如下所示。<packaging> <autoResourcePackage qualifier="Scale" /> <autoResourcePackage qualifier="DXFeatureLevel" /> </packaging>
- 保存并关闭该文件,然后重新构建项目。
若要确认是否将自动拆分选择考虑在内,请查找文件 <ProjectFolder>\obj\<ReleaseConfiguration folder>\split.priconfig.xml
并确认其内容与选择相匹配。 如果匹配,则代表已成功通过配置 Visual Studio 将选择的资源构建到应用包。
还有一个需要执行的最终步骤。 但仅在已删除 Language
限定符名称时需要执行该步骤。 你需要将应用的所有受支持语言的并集指定为应用的默认语言。 有关详细信息,请参阅指定应用使用的默认资源。 如果要在应用包中包含英语、西班牙语和法语的资源,下面就是 priconfig.default.xml
应包含的内容。
<default>
<qualifier name="Language" value="en;es;fr" />
...
</default>
WSL 的工作原理是怎样的?
在后台,Visual Studio 启动一个名为 MakePri.exe
的工具来生成一个称为包资源索引的文件,用于描述所有应用的资源,包括指示要自动拆分的资源限定符名称。 有关此工具的详细信息,请参阅使用 MakePri.exe 手动编译资源。 Visual Studio 将配置文件传递给 MakePri.exe
。 priconfig.packaging.xml
文件的内容用作该配置文件的 <packaging>
元素,即确定自动拆分的部分。 因此,添加和编辑 priconfig.packaging.xml
最终会影响 Visual Studio 为应用生成的包资源索引文件的内容,以及应用程序包中包的内容。
使用不同的文件名而不是 priconfig.packaging.xml
如果将文件命名为 priconfig.packaging.xml
,则 Visual Studio 将自动识别并使用它。 如果为其提供不同的名称,需要让 Visual Studio 知道。 将此 XML 添加到项目文件中第一个 <PropertyGroup>
元素的开始和结束标记之间。
<AppxPriConfigXmlPackagingSnippetPath>FILE-PATH-AND-NAME</AppxPriConfigXmlPackagingSnippetPath>
将 替换为 FILE-PATH-AND-NAME
文件的路径和名称。
选项 2. 使用项目文件将资源构建到应用包
这是选项 1 的替代方法。 了解选项 1 的工作原理后,如果选项 2 更适合你的开发和/或生成工作流,则可以选择执行选项 2。
将此 XML 添加到项目文件中第一个 <PropertyGroup>
元素的开始和结束标记之间。
<AppxBundleAutoResourcePackageQualifiers>Language|Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>
以下是删除第一个限定符名称后的外观。
<AppxBundleAutoResourcePackageQualifiers>Scale|DXFeatureLevel</AppxBundleAutoResourcePackageQualifiers>
保存并关闭,然后重新生成项目。
还有一个需要执行的最终步骤。 但仅在已删除 Language
限定符名称时需要执行该步骤。 你需要将应用的所有受支持语言的并集指定为应用的默认语言。 有关详细信息,请参阅指定应用使用的默认资源。 如果你在应用包中包含英语、西班牙语和法语资源,则项目文件将包含此内容。
<AppxDefaultResourceQualifiers>Language=en;es;fr</AppxDefaultResourceQualifiers>
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈