我在将应用更新部署到商店时遇到问题。
该应用程序运行SQLite,我最近发现它在某些x64架构上引发错误。
BadImageFormatException:尝试加载带有的程序 格式不正确。
我明白这意味着什么。该应用程序的x64版本使用的是sqlite3.dll
的x86编译版本。我可以通过以下方法解决此问题并构建x64版本。
这会创建一个正确 x64应用包,其x64版本为sqlite3.dll
对于所有三种体系结构(x86,x64和ARM),在此之后为我提供了三个单独的appxbundle
文件。当我通过开发者信息中心将新软件包上传到商店时,我只能上传一个。
如果我打开“创建应用包”并为我的包选择所有三种体系结构,它会为所有三种体系生成一个appxbundle
。但是当我解压缩这个appxbundle
时,我可以看到x64构建使用的是x86编译的sqlite3.dll
而不是x64版本。
我尝试在7zip中打开appxbundle
并替换文件,但是7zip无法写入文件,只能读取它。
然后我尝试解压缩appxbundle
并使用单个appxbundles中的正确构建替换三个构建中的每一个。然后,我使用无压缩将所有内容压缩并将.zip
重命名为.appxbundle
,但商店将此作为无效文件拒绝。
我猜测正在进行某种签名或专有压缩。说实话,我没想到会工作,但值得一试。
如何为每个架构构建应用的正确版本并将其包含在一个appxbundle
中?我可以从单独的构建中手动创建自己的appxbundle
吗?
我接受了下面的crea7or的回答,但我只是想稍微扩展一下
使用MakeAppX.exe
命令行工具,我可以使用以下命令正确解包并重新绑定我的appxbundle
文件
// to unbundle
MakeAppX.exe unbundle /p MyPackage.appxbundle /d MyPackage
// to bundle
MakeAppX.exe bundle /d MyPackage /p MyPackage.appxbundle
一些方便的指针。请确保使用8.1版本的MakeAppX,因为8.0版本无法捆绑或解包。
C:\ Program Files(x86)\ Windows Kits \ 8.1 \ bin \ x86 \ makeappx.exe
如果您只是将此路径添加到高级系统设置中的PATH
环境变量中,那么您将省去很多麻烦和打字。这样您就可以从任何位置运行MakeAppX。对于我这一代人来说,这似乎是显而易见的,但不是每个人都对DOS如此熟悉。 =)
Visual Studio创建.appxupload
个包,根据this question,将zip文件重命名为.appxupload
。 MakeAppX无法创建或解包.appxupload
个包 - 您必须使用zip应用程序。
但是,我使用7zip创建的任何 .appxupload
包在上传时都不验证。幸运的是,商店似乎会直接接受.appxbundle
,所以我根本不需要拉上它,只捆绑它。我已将此提交给商店。如果获得批准,我会报告。
更新
上述appxbundle文件未获批准,技术测试失败。我再次尝试了zip方法,这次被接受了,如果这个过去,我会再次报告。
总结一下:
c:\MyApp.appxupload -> [unzip] -> c:\MyApp\
c:\MyApp\MyApp.appxbundle -> [makeappx unbundle] -> c:\MyApp\MyApp\
c:\MyApp\MyApp\MyApp.appx -> [do whatever you need to here]
c:\MyApp\MyApp\ -> [makeappx bundle] -> c:\MyApp\MyApp.appxbundle
c:\MyApp\ -> [zip] -> c:\MyApp.zip
c:\MyApp.zip -> [rename] -> c:\MyApp.appxupload