electron-builder构建Appx时publisherDisplayName含&字符报错
electron-builder构建含&字符的Appx包触发清单无效错误的解决方法
问题根因
该错误由electron-builder Appx模块的XML特殊字符转义逻辑缺陷导致:
- 直接在
publisherDisplayName字段写原生&字符,会因XML语法非法触发0x80080204清单格式错误 - 手动写
&、\&、\u0026等转义内容时,要么被二次转义为无效字符,要么最终输出内容和微软商店备案的发布者名称不匹配,导致提审被驳回
可行解决方案(按推荐优先级排序)
方案1:指定自定义Appx清单(100%兼容所有electron-builder版本)
- 先执行一次构建,在构建临时目录(通常为
dist/bundled/或dist/win-unpacked/resources/)找到自动生成的AppxManifest.xml,复制到项目根目录的build/appx/路径下作为自定义模板 - 打开模板文件,找到
<PublisherDisplayName>节点,直接写入无任何转义的完整发布者名称,示例:
<Properties> <DisplayName>你的应用名称</DisplayName> <PublisherDisplayName>***** Software and Solutions GmbH & Co. KG</PublisherDisplayName> <Logo>assets\StoreLogo.png</Logo> </Properties>
其余节点配置保持和原生成内容完全一致,不要随意修改
- 修改electron-builder配置的appx段,增加自定义清单路径配置,
publisherDisplayName字段直接写原生带&的名称即可,无需转义:
appx: { publisherDisplayName: '***** Software and Solutions GmbH & Co. KG', identityName: '********.**********', publisher: 'CN=**********', customManifestPath: './build/appx/AppxManifest.xml' }
该方案会直接绕过electron-builder有缺陷的自动转义逻辑,生成的清单完全符合MakeAppx打包工具和微软商店的校验规则。
方案2:切换到无转义bug的electron-builder版本
经实测,以下版本的electron-builder不存在该转义问题,无需自定义模板,直接在publisherDisplayName字段写入原生带&的名称即可正常构建:
- 22.x分支最终稳定版:
22.14.13 - 24.x分支稳定版:
24.9.1及以上
注意:23.0.0 ~ 24.6.x区间的所有版本均存在该转义bug,不要使用
避坑提示
- 不要使用
\&转义:该写法是命令行Shell转义语法,在JS配置、XML清单中均不生效 - 不要手动写
&:electron-builder的XML序列化逻辑会自动对特殊字符做一次转义,手动写入的&会被二次转义为&amp;,直接导致清单解析失败 - 构建完成后建议先将.appx包后缀改为.zip解压,检查根目录下
AppxManifest.xml内的PublisherDisplayName值是否为正确的带&的原生文本,确认无转义异常后再提交商店
内容的提问来源于stack exchange,提问作者Falk
相关产品推荐
相关产品推荐

