SQLite在同一Windows应用商店应用包中的不同版本

时间:2015-03-11 09:44:06

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

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

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

  

BadImageFormatException:尝试加载带有的程序   格式不正确。

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

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

    build > configuration manager

    这会创建一个正确 x64应用包,其x64版本为sqlite3.dll

    对于所有三种体系结构(x86,x64和ARM),在此之后为我提供了三个单独的appxbundle文件。当我通过开发者信息中心将新软件包上传到商店时,我只能上传一个

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

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

    然后我尝试解压缩appxbundle并使用单个appxbundles中的正确构建替换三个构建中的每一个。然后,我使用无压缩将所有内容压缩并将.zip重命名为.appxbundle,但商店将此作为无效文件拒绝。

    enter image description here

    我猜测正在进行某种签名或专有压缩。说实话,我没想到会工作,但值得一试。

    如何为每个架构构建应用的正确版本并将其包含在一个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如此熟悉。 =)

    enter image description here

    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
    

1 个答案:

答案 0 :(得分:1)

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