MSIX 应用的应用包要求

要求

按照以下准则准备应用软件包以提交到 Microsoft Store。

在为 Microsoft Store 构建应用软件包之前

确保使用 Windows 应用认证工具包来测试应用。 我们还建议在不同类型的硬件上测试应用。 请注意,在你的应用通过我们的认证并在 Microsoft Store 中发布之前,它只能在拥有开发者许可证的计算机上安装和运行。

使用 Microsoft Visual Studio 构建应用软件包

如果使用 Microsoft Visual Studio 作为开发环境,那么其中已有的内置工具能让你快速轻松地创建应用软件包。 有关详细信息,请参阅打包应用

注意

确保所有文件名都使用 ANSI。

在 Visual Studio 中创建软件包时,请确保使用与开发人员帐户关联的同一帐户登录。 软件包清单的某些部分有与你的帐户相关的具体详细信息。 这些信息会被自动检测和添加。 如果未在清单中添加附加信息,则可能会遇到软件包上传失败的情况。

生成应用的 UWP 程序包时,Visual Studio 可以创建 .msix 或 appx 文件,或者 .msixupload 或 .appxupload 文件。 对于 UWP 应用,我们建议始终在“程序包”页面中上传 .msixupload 或 .appxupload 文件。 有关为应用商店打包 UWP 应用的更多信息,请参阅使用 Visual Studio 打包 UWP 应用

应用的软件包不一定要使用可信证书颁发机构的证书进行签名。

应用捆绑包

对于面向 UWP 的应用,Visual Studio 可以生成应用程序包(.msixbundle 或 .appxbundle)以减少用户所下载应用的大小。 如果定义了特定语言的资产、各种映像规模的资产或适用于 Microsoft DirectX 特定版本的资源,这将很有帮助。

注意

 一个应用捆绑包可以包含所有体系结构的软件包。

有了应用捆绑包,用户只用下载相关文件,而不用下载所有可能的资源。 有关应用捆绑包的更多信息,请参阅打包应用使用 Visual Studio 打包 UWP 应用

手动构建应用软件包

如果不使用 Visual Studio 创建软件包,则必须手动创建软件包清单

请务必查看应用软件包清单文档,了解完整的清单详情和要求。 清单必须遵循软件包清单架构才能通过认证。

清单必须包含一些有关你的帐户和应用的具体信息。 可以通过仪表板中应用概览页面产品管理部分的查看应用标识的详细信息来查看这些信息。

注意

 清单中的值区分大小写。 空格和其他标点符号也必须匹配。 仔细输入数值并反复检查,确保它们正确无误。

应用程序包(.msixbundle 或 .appxbundle)使用不同的清单。 有关应用捆绑清单的详细信息和要求,请查看捆绑清单文档。 请注意,在 .msixbundle 或 .appxbundle 中,每个包含程序包的清单都必须使用相同的元素和属性,Identity 元素的 ProcessorArchitecture 属性除外。

提示

 在提交软件包之前,请务必运行 Windows 应用认证工具包。 这有助于确定你的清单是否存在任何可能导致认证或提交失败的问题。

软件包格式要求

应用软件包必须符合这些要求。

应用软件包属性 要求
包大小 .msixbundle 或 .appxbundle:每个捆绑包最大为 25 GB
面向 Windows 10 或 Windows 11 的 .msix 或 .appx 程序包:每个程序包最大为 25 GB
块映射哈希 SHA2-256 算法

支持的版本

对于 UWP 应用,所有程序包都必须以 Microsoft Store 支持的 Windows 10 或 Windows 11 版本为目标。 必须在应用清单 TargetDeviceFamily 元素的 MinVersionMaxVersionTested 属性中指明软件包支持的版本。

StoreManifest XML 文件

StoreManifest.xml 是一个可选的配置文件,可包含在应用软件包中。 其目的是启用软件包清单未涵盖的功能,例如将声明应用为 Microsoft Store 设备应用,或声明软件包适用于设备所依赖的要求。 如果使用,StoreManifest.xml 与应用包一起提交,并且必须在应用的主项目的根文件夹中。 有关详细信息,请参阅 StoreManifest 架构

包版本编号

你提供的每个软件包都必须有一个版本号(作为应用清单中包/标识元素的版本属性中的值提供)。 Microsoft Store 会强制执行与版本号相关的某些规则,这些规则在不同 OS 版本中的工作方式略有不同。

注意

除非另有说明,否则本主题将引用“程序包”,并对 .msix/.appx 和 .msixbundle/.appxbundle 文件的版本号应用相同的规则。

Windows 10 和 11 软件包的版本号

重要

对于 Windows 10 或 Windows 11 (UWP) 软件包,版本号的最后一个(第四)部分保留给应用商店使用,在在构建软件包时必须保留为 0(尽管应用商店可能会更改该部分的值)。 其他部分必须设置为 0到 65535 之间的整数(除了第一部分,不能是 0)。

从已发布的提交中选择 UWP 软件包时,Microsoft Store 将始终使用适用于客户 Windows 10 或 Windows 11 设备的最高版本软件包。 这带来了更大的灵活性,让你能够控制在特定设备类型上向用户提供哪些软件包。 重要的是,你可以按照任何顺序提交这些软件包;并不局限于在每次提交时都提供版本更高的软件包。

你甚至可以提供多个具有相同版本号的 UWP 程序包。 但是,共享版本号的软件包不能具有相同的架构,因为应用商店为每个软件包使用的完整标识必须是唯一的。 有关详细信息,请参阅标识

当你提供多个使用相同版本号的 UWP 软件包时,体系结构(按 x64、x86、Arm、中性的顺序)将被用来决定哪个软件包的等级更高(当应用商店决定向客户的设备提供哪个软件包时)。 在对使用相同版本号的应用程序捆绑包进行排名时,会考虑捆绑包中最高的体系结构等级:包含 x64 软件包的应用捆绑包的排名会高于只包含 x86 软件包的应用捆绑包。

这样,你便可以灵活地随着时间推移不断开发应用。 你可以上传和提交使用较低版本号的新软件包,以添加对以前不支持的 Windows 10 或 Windows 11 设备的支持;你可以添加具有更严格依赖性的高版本软件包,以利用硬件或操作系统功能;你也可以添加高版本软件包,作为对部分或全部现有客户群的更新。

以下示例演示了如何管理版本号,以便通过多次提交向客户交付预定的软件包。

示例:通过多次提交转为使用单一软件包

Windows 10 让你能够编写可在任何地方运行的单一代码库。 这使得启动一个新的跨平台项目变得更加容易。 但是,出于各种原因,你可能不希望立即合并现有代码库来创建一个项目。

你可以使用软件包版本规则,逐步将客户转移到适用于通用设备系列的单一软件包,同时为特定设备系列(包括利用 Windows 10 API 的设备)提供大量的临时更新。 下面的示例演示了如何对同一应用程序的一系列提交一致地应用相同的规则。

提交 目录 客户体验
1 - 软件包版本:1.1.10.0
- 设备系列:Windows.Desktop, minVersion 10.0.10240.0
- 使用 Windows 10 和 11 Desktop 版本 10.0.10240.0 及以上的设备将获得 1.1.10.0
- 其他设备系列将无法购买和安装该应用
2 - 软件包版本:1.1.10.0
- 设备系列:Windows.Desktop, minVersion 10.0.10240.0

- 软件包版本:1.0.0.0
- 设备系列:Windows.Universal, minVersion 10.0.10240.0
- 使用 Windows 10 和 11 Desktop 版本 10.0.10240.0 及以上的设备将获得 1.1.10.0
- 其他(非桌面)设备系列推出后,将获得 1.0.0.0
- 已安装应用的桌面设备将不会看到任何更新(因为它们已有最佳可用版本 1.1.10.0,并且高于 1.0.0.0)
3 - 软件包版本:1.1.10.0
- 设备系列:Windows.Desktop, minVersion 10.0.10240.0

- 软件包版本:1.1.5.0
- 设备系列:Windows.Universal, minVersion 10.0.10250.0

- 软件包版本:1.0.0.0
- 设备系列:Windows.Universal, minVersion 10.0.10240.0
- 使用 Windows 10 和 11 Desktop 版本 10.0.10240.0 及以上的设备将获得 1.1.10.0
- 使用内部版本 10.0.10250.0 及更高版本推出的其他(非桌面)设备系列将获得 1.1.5.0
- 使用内部版本 >=10.0.10240.0 < 和 10.010250.0 引入的其他(非桌面)设备系列将获得 1.1.0.0
- 已安装应用的桌面设备将不会看到任何更新(因为它们已有均高于 1.1.5.0 和 1.0.0.0 的最佳可用版本 1.1.10.0)
4 - 软件包版本:2.0.0.0
- 设备系列:Windows.Universal, minVersion 10.0.10240.0
- 使用 Windows 10 和 11 版本 v10.0.10240.0 及更高版本的所有设备系列的所有用户都将获得 2.0.0.0 软件包

注意

 在所有情况下,用户设备都将收到其符合条件的最高版本号的软件包。 例如,在上面的第三个提交中,所有桌面设备都将获得 v1.1.10.0,即使它们的 OS 版本为 10.0.10250.0 或更高,因此也可以接受 v1.1.5.0。 由于 1.1.10.0 是可用的最高版本号,因此他们将获得的软件包就是 1.1.10.0。

使用版本号回滚到以前提供的新购买软件包

如果你保留了程序包文件的副本,在你发现版本问题时,你可以选择将应用商店中你的应用包回滚到早期 Windows 10 程序包。 这是一种临时性的方法,可在你解决此问题时限制对你的客户的中断。

为此,创建新的提交。 删除有问题的软件包,并上传要在应用商店中提供的旧软件包。 已经收到要回滚的软件包的客户仍然会收到有问题的软件包(因为你的旧软件包有一个较早的版本号)。 但这将阻止其他人获取有问题的软件包,同时让应用在应用商店中仍然可用。

若要为已收到有问题程序包的客户解决此问题,你应尽快提交一个版本号高于有问题程序包的新 Windows 10 程序包。 在提交通过认证程序后,所有客户都将更新到新软件包,因为新软件包的版本号更高。

支持的语言

你可以用 100 多种语言向 Windows Store 提交应用。

若要了解有关在应用中配置语言的详细信息,请参阅全球化和本地化以及了解用户配置文件语言和应用清单语言。 我们还提供多语言应用工具包来帮助你编写支持多种语言的应用。

支持的语言列表

以下是 Microsoft Store 支持的语言。 你的应用必须至少支持其中一种语言。

Microsoft Store 不支持此处未包含的语言代码。 我们建议你不要包含针对以下语言代码以外的语言代码的包;此类包不会分发给客户,并可能导致认证延迟或失败。

语言名称 支持的语言代码
阿拉伯语 ar、ar-sa、ar-ae、ar-bh、ar-dz、ar-eg、ar-iq、ar-jo、ar-kw、ar-lb、ar-ly、ar-ma、ar-om、ar-qa、ar-sy、ar-tn、ar-ye
南非荷兰语 af, af-za
阿尔巴尼亚语 sq, sq-al
阿姆哈拉语 am, am-et
亚美尼亚语 hy, hy-am
阿萨姆语 as, as-in
阿塞拜疆语 az-arab、az-arab-az、az-cyrl、az-cyrl-az、az-latn、az-latn-az
巴斯克语(巴斯克) eu, eu-es
白俄罗斯语 be, be-by
Bangla bn, bn-bd, bn-in
波斯尼亚语 bs, bs-cyrl, bs-cyrl-ba, bs-latn, bs-latn-ba
保加利亚语 bg, bg-bg
加泰罗尼亚语 ca, ca-es, ca-es-valencia
切罗基语 chr-cher, chr-cher-us, chr-latn
中文(简体) zh-Hans、zh-cn、zh-hans-cn、zh-sg、zh-hans-sg
中文(繁体) zh-Hant、zh-hk、zh-mo、zh-tw、zh-hant-hk、zh-hant-mo、zh-hant-tw
克罗地亚语 hr, hr-hr, hr-ba
捷克语 cs, cs-cz
丹麦语 da, da-dk
达里语 prs, prs-af, prs-arab
荷兰语 nl, nl-nl, nl-be
英语 en、en-au、en-ca、en-gb、en-ie、en-in、en-nz、en-sg、en-us、en-za、en-bz、en-hk、en-id、en-jm、en-kz、en-mt、en-my、en-ph、en-pk、en-tt、en-vn、en-zw、en-053、en-021、en-029、en-011、en-018、en-014
爱沙尼亚语 et, et-ee
菲律宾语 fil, fil-latn, fil-ph
芬兰语 fi, fi-fi
法语 fr、fr-be、fr-ca、fr-ch、fr-fr、fr-lu、fr-015、fr-cd、fr-ci、fr-cm、fr-ht、fr-ma、fr-mc、fr-ml、fr-re、frc-latn、frp-latn、fr-155、fr-029、fr-021、fr-011
加利西亚语 gl, gl-es
格鲁吉亚语 ka, ka-ge
德语 de, de-at, de-ch, de-de, de-lu, de-li
希腊语 el, el-gr
古吉拉特语 gu, gu-in
豪撒语 ha, ha-latn, ha-latn-ng
希伯来语 he, he-il
Hindi hi, hi-in
匈牙利语 hu, hu-hu
冰岛语 is, is-is
伊博语 ig-latn, ig-ng
印度尼西亚语 id, id-id
因纽特语(拉丁语) iu-cans, iu-latn, iu-latn-ca
爱尔兰语 ga, ga-ie
科萨语 xh, xh-za
祖鲁语 zu, zu-za
意大利语 it, it-it, it-ch
日语 ja , ja-jp
卡纳达语 kn, kn-in
哈萨克语 kk, kk-kz
高棉语 km, km-kh
基切语 quc-latn, qut-gt, qut-latn
卢旺达语 rw, rw-rw
斯瓦希里语 sw, sw-ke
孔卡尼语 kok, kok-in
韩语 ko, ko-kr
库尔德语 ku-arab, ku-arab-iq
柯尔克孜语 ky-kg, ky-cyrl
老挝语 lo, lo-la
拉脱维亚语 lv, lv-lv
立陶宛语 lt, lt-lt
卢森堡语 lb, lb-lu
马其顿语 mk, mk-mk
马来语 ms, ms-bn, ms-my
马拉雅拉姆语 ml, ml-in
马耳他语 mt, mt-mt
毛利语 mi, mi-latn, mi-nz
马拉地语 mr, mr-in
蒙古语(西里尔文) mn-cyrl, mn-mong, mn-mn, mn-phag
尼泊尔语 ne, ne-np
挪威语 nb、nb-no、nn、nn-no、no、no-no
奥里亚语 or, or-in
波斯语 fa, fa-ir
波兰语 pl, pl-pl
葡萄牙语(巴西) pt-br
葡萄牙语(葡萄牙) pt, pt-pt
旁遮普语 pa, pa-arab, pa-arab-pk, pa-deva, pa-in
盖丘亚语 quz, quz-bo, quz-ec, quz-pe
罗马尼亚语 ro, ro-ro
俄语 ru , ru-ru
苏格兰盖尔语 gd-gb, gd-latn
塞尔维亚语(拉丁) sr-Latn, sr-latn-cs, sr, sr-latn-ba, sr-latn-me, sr-latn-rs
塞尔维亚语(西里尔) sr-cyrl, sr-cyrl-ba, sr-cyrl-cs, sr-cyrl-me, sr-cyrl-rs
北索托语 nso, nso-za
茨瓦纳语 tn, tn-bw, tn-za
信德语 sd-arab, sd-arab-pk, sd-deva
僧伽罗语 si, si-lk
斯洛伐克语 sk, sk-sk
斯洛文尼亚语 sl, sl-si
西班牙语 es、es-cl、es-co、es-es、es-mx、es-ar、es-bo、es-cr、es-do、es-ec、es-gt、es-hn、es-ni、es-pa、es-pe、es-pr、es-py、es-sv、es-us、es-uy、es-ve、es-019、es-419
瑞典语 sv, sv-se, sv-fi
塔吉克语(西里尔文) tg-arab, tg-cyrl, tg-cyrl-tj, tg-latn
泰米尔语 ta, ta-in
鞑靼语 tt-arab, tt-cyrl, tt-latn, tt-ru
泰卢固语 te, te-in
泰语 th, th-th
提格里尼亚语 ti, ti-et
土耳其语 tr, tr-tr
土库曼语 tk-cyrl, tk-latn, tk-tm, tk-latn-tr, tk-cyrl-tr
乌克兰语 uk, uk-ua
乌尔都语 ur, ur-pk
维吾尔语 ug-arab, ug-cn, ug-cyrl, ug-latn
乌兹别克语(拉丁文) uz, uz-cyrl, uz-latn, uz-latn-uz
越南语 vi, vi-vn
威尔士语 cy, cy-gb
沃洛夫语 wo, wo-sn
约鲁巴语 yo-latn, yo-ng