UWP .appinstaller解析报错‘Error in parsing the app package’求助
咱们来拆解下你的.appinstaller XML里导致解析错误的几个关键问题,这些都是很容易踩的坑:
1. 主包版本号完全不匹配
你在<MainBundle>里写的版本是Version="1.0.0.0",但对应的Uri指向的包是EGClockingXamarin.UWP_1.0.8.0_x86_x64_arm_Debug.appxbundle——版本号是1.0.8.0啊!系统会严格校验这个版本一致性,不匹配直接就触发解析错误了,必须把<MainBundle>里的Version改成和实际包一致的1.0.8.0。
2. 依赖包的架构和包本身完全对不上
看你这个依赖包条目:
<Package Name="Microsoft.VCLibs.ARM.Debug.14.00" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="14.0.24605.0" ProcessorArchitecture="x64" Uri="http://foobarbaz.com/Microsoft.VCLibs.ARM.Debug.14.00.appx" />
- 包名称里明明白白写着
ARM.Debug,结果你设置的ProcessorArchitecture是x64,架构完全不匹配,得改成ProcessorArchitecture="arm"才行。 - 另外你的主包是支持x86/x64/ARM三种架构的,但依赖包只加了x86的.NET CoreRuntime和ARM的VCLibs,这样其他架构的用户安装时会出问题,最好给每个架构都配上对应的依赖包(分别用
<Package>指定不同的ProcessorArchitecture)。
3. 用了Debug版本的依赖包
你引用的Microsoft.VCLibs.ARM.Debug.14.00是Debug版本的库,这种包只能在开发调试时用,绝对不能用来做公开分发的安装程序!赶紧换成Release版本的VCLibs,也就是不带Debug后缀的Microsoft.VCLibs.14.00系列包。
4. 可选优化:命名空间版本
你用的是2017版的命名空间http://schemas.microsoft.com/appx/appinstaller/2017,虽然这个版本还能用,但如果是给较新的Windows版本做安装,建议升级到最新的命名空间(比如2021版),不过这不是当前解析错误的直接原因,先把前面几个问题解决了再说。
给你个修正后的示例片段参考:
<?xml version="1.0" encoding="utf-8"?> <AppInstaller xmlns="http://schemas.microsoft.com/appx/appinstaller/2017" Version="1.0.0.0" Uri="http://mywebservice.azurewebsites.net/APP_UWP.appinstaller" > <!-- 修正主包版本号,和实际包一致 --> <MainBundle Name="MainApp" Publisher="CN=EGSolutions" Version="1.0.8.0" Uri="http://mywebservice.azurewebsites.net/EGClockingXamarin.UWP_1.0.8.0_x86_x64_arm_Debug.appxbundle" /> <Dependencies> <!-- 为三个架构分别添加对应的.NET CoreRuntime依赖 --> <Package Name="Microsoft.NET.CoreRuntime.2.1" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="14.0.24605.0" ProcessorArchitecture="x86" Uri="http://your-domain.com/Microsoft.NET.CoreRuntime.2.1.x86.appx" /> <Package Name="Microsoft.NET.CoreRuntime.2.1" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="14.0.24605.0" ProcessorArchitecture="x64" Uri="http://your-domain.com/Microsoft.NET.CoreRuntime.2.1.x64.appx" /> <Package Name="Microsoft.NET.CoreRuntime.2.1" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="14.0.24605.0" ProcessorArchitecture="arm" Uri="http://your-domain.com/Microsoft.NET.CoreRuntime.2.1.arm.appx" /> <!-- 替换为Release版本的VCLibs,匹配对应架构 --> <Package Name="Microsoft.VCLibs.14.00" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="14.0.24605.0" ProcessorArchitecture="x86" Uri="http://your-domain.com/Microsoft.VCLibs.14.00.x86.appx" /> <Package Name="Microsoft.VCLibs.14.00" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="14.0.24605.0" ProcessorArchitecture="x64" Uri="http://your-domain.com/Microsoft.VCLibs.14.00.x64.appx" /> <Package Name="Microsoft.VCLibs.14.00" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="14.0.24605.0" ProcessorArchitecture="arm" Uri="http://your-domain.com/Microsoft.VCLibs.14.00.arm.appx" /> </Dependencies> </AppInstaller>
另外还要注意:所有Uri指向的包文件必须能被用户正常访问,而且文件本身不能损坏。如果修正后还是有问题,可以去Windows事件查看器里找详细日志(路径是Windows Logs -> Application,找来源为AppxPackagingOM的事件),里面会告诉你具体是哪一步解析失败了。
内容的提问来源于stack exchange,提问作者Lord-David

