【问题标题】:Different builds of SQLite in the same Windows Store app bundle同一 Windows Store 应用程序包中不同版本的 SQLite
【发布时间】:2015-03-12 18:19:38
【问题描述】:

我在将我的应用更新部署到商店时遇到问题。

该应用程序运行 SQLite,我最近发现它在某些 x64 架构上会引发错误。

BadImageFormatException: 试图加载一个带有 格式不正确。

我明白这意味着什么。该应用程序的 x64 版本使用的是 x86 编译版本的sqlite3.dll。我可以通过以下方法解决这个问题并构建一个x64版本。

  1. 打开项目 > 属性,并将平台和平台目标设置为 x64。
  2. 保存
  3. 打开 Build > Configuration Manager 并将 Active Platform and Platform (Release) 设置为 x64。
  4. 构建项目
  5. 打开项目 > 商店 > 创建应用包并生成我的包

这将创建一个正确的 x64 应用程序包,其 x64 版本为 sqlite3.dll

对所有三种架构(x86、x64 和 ARM)执行此操作后,我将获得三个独立的 appxbundle 文件。当我通过开发者仪表板将新包上传到商店时,我只能上传一个

如果我打开“创建应用程序包”并为我的包选择所有三个架构,它会为所有三个生成一个 appxbundle。但是,当我解压缩此appxbundle 时,我可以看到 x64 构建使用的是 x86 编译的sqlite3.dll,而不是 x64 版本。

我尝试在 7zip 中打开 appxbundle 并替换文件,但 7zip 无法写入文件,只能读取。

然后我尝试解压缩appxbundle 并将三个构建中的每一个替换为来自单个 appxbundle 的正确构建。然后我不使用压缩将这批文件压缩在一起,并将.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,它是重命名为.appxupload 的zip 文件。 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

【问题讨论】:

    标签: windows sqlite windows-store-apps 64-bit


    【解决方案1】:

    您应该使用 MakeAppx tool 创建有效的 appx 包包,因为它们已签名。 Here is 创建包的教程。

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      相关资源
      最近更新 更多