无法通过 API 更新 UWP 包航班提交

Posted

技术标签:

【中文标题】无法通过 API 更新 UWP 包航班提交【英文标题】:Can't update UWP package flight submission through API 【发布时间】:2021-06-30 01:49:21 【问题描述】:

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

    使用可用的客户端凭据检索 API 访问令牌,如 in here 所述 Create 或 fetch 航班提供航班名称 Create 或 fetch 给定航班内的提交 使用fileUploadUrl 和blob 客户端SDK 上传包。在这一步中,我都尝试使用*.msixupload 和压缩*.msixupload 文件并改为上传压缩存档。 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 并稍作修改

    IngestionClient.GetClientCredentialAccessToken 出于某种原因无法正常工作,因此我已将其替换为我自己的实现 添加新包时,我指定了实际*.msixbundle 的名称,而不是硬编码package.appx
packages.Add(new

    fileStatus = "PendingUpload",
    fileName = Path.GetFileName(bundlePath),
);

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

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

意识到即使是官方样本也不起作用,这真是令人沮丧。目前我完全陷入困境。

【问题讨论】:

尝试手动上传而不是使用 API。 手动上传按预期工作 那就用手动上传吧 正如我在问题中提到的,我们正在尝试自动化完整的发布管道,这个命令行实用程序将成为更大的 CI/CD 构建发布管道的一部分。因此,手动上传不是一种选择。 【参考方案1】:

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

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

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

【讨论】:

你是救生员。本质上,我将 *.msixbundle 打包成一个 zip,将其上传到文件上传 url,并将 zip 存档中的文件名指定为新包,一切正常!

以上是关于无法通过 API 更新 UWP 包航班提交的主要内容,如果未能解决你的问题,请参考以下文章

VS2017 无法构建 UWP Store 包(.NET Native,ARM 构建中的错误)

UWP 应用 - 更新证书后包系列名称无效

为啥我在 Windows 10 UWP 上收到“无法注册包”部署错误?

UWP 应用程序更新后无法读取文件

由于不支持的 API FindFirstFileEx(WACK 在本地传递)导致 UWP 应用提交失败

Win10 1803更新UWP无法安装的解决办法|错误代码0x80073D0D