【发布时间】: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 构建发布管道的一部分。因此,手动上传不是一种选择。