无法通过 API 更新 UWP 包飞行提交

问题描述

我正在尝试通过 Package flight management API 自动提交 UWP 包。我已遵循 this example,我正在采取的步骤如下

  1. 使用可用的客户端凭据检索 API 访问令牌,如in here
  2. Createfetch 航班给出航班名称
  3. Createfetch 给定航班内的提交
  4. 使用 fileUploadUrl 和 blob 客户端 SDK 上传包。在这一步中,我尝试使用 *.msixupload 并压缩 *.msixupload 文件上传 zip 存档。
  5. Update 航班提交以指定要使用的包的名称在这里,我使用带有以下正文的 PUT 请求。
{
  "flightPackages": [
    {
      "fileName": "MY_APP.msixupload","fileStatus": "PendingUpload","minimumDirectXVersion": "None","minimumSystemRam": "None"
    }
  ]
}

我还尝试指定 MY_APP.msixbundle,它是 *.msixupload 包内的一个文件。 7. 提交航班提交

执行所有这些步骤后,提交失败并显示以下错误

"errors": [
            {
                "code": "InvalidParameterValue","details": "File 'MY_APP_0.63.0.0_x86_x64_arm_bundle.msixbundle' not found in archive."
            }
        ],

我认为问题在于我上传包的方式和我使用的文件类型。在我提到的 the example 中,您会发现在 blob 上传步骤中,他们实际上上传了带有以下注释的 zip 存档:

// Upload the zip archive with all new files to the SAS URL returned with the submission.

此外,当他们更新航班提交时,他们使用以下对象

new
{
   fileStatus = "PendingUpload",fileName = "package.appx",}

我在任何地方都找不到的第一件不明显的事情是 API 需要什么样的 ZIP 存档?应该是什么结构?我可以将哪些类型的文件放入存档?

第二个问题是,*.appx 不再是 UWP 使用的包格式,而是 *.msix。 那么,我做错了什么?

Here 你可以找到完整的代码


更新 1

在对我的代码进行了大量尝试并试图了解它有什么问题之后,我决定从 official Microsoft sample guide 复制代码并使用示例代码稍加修改更新 my repo

  1. IngestionClient.GetClientCredentialAccesstoken 由于某种原因不起作用,所以我用我自己的实现替换了它
  2. 添加新包时,我指定了实际 package.appx名称而不是硬编码的 *.msixbundle
packages.Add(new
{
    fileStatus = "PendingUpload",fileName = Path.GetFileName(bundlePath),});

这里的 bundlePath 是到 *.msixbundle 的物理路径

完成此操作后,我按原样运行了示例。不幸的是,效果是一样的 - 即使我将 *.msixbundle 上传到航班提交的 fileUploadUrl,但出于某种原因,合作伙伴中心不会检测到该包裹,一切都将保持不变。

令人沮丧的是,即使是官方样本也不起作用。此刻我完全被困住了。

解决方法

我知道这个问题很老了,但也许它可以帮助有同样问题的人。

  • msixupload 包必须打包成 ZIP 文件。 ZIP 文件是要上传到 Azure Blob 存储的文件。

  • 此处的错误消息表明合作伙伴中心正在寻找 .msixbundle,但您上传了 .msixupload 包。我很确定一旦使用 msixbundle 更新航班,您需要继续在该航班上运送捆绑包。尝试在没有包的新创建的航班上运行您的代码。如果这也不起作用,请生成 .msixbundle 并尝试上传(打包在 ZIP 中)。