问题描述
我正在尝试通过 Package flight management API 自动提交 UWP 包。我已遵循 this example,我正在采取的步骤如下
- 使用可用的客户端凭据检索 API 访问令牌,如in here
- Create 或 fetch 航班给出航班名称
- Create 或 fetch 给定航班内的提交
- 使用 fileUploadUrl 和 blob 客户端 SDK 上传包。在这一步中,我尝试使用
*.msixupload
并压缩*.msixupload
文件并上传 zip 存档。 -
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
。
那么,我做错了什么?
更新 1
在对我的代码进行了大量尝试并试图了解它有什么问题之后,我决定从 official Microsoft sample guide 复制代码并使用示例代码稍加修改更新 my repo
-
IngestionClient.GetClientCredentialAccesstoken
由于某种原因不起作用,所以我用我自己的实现替换了它 - 添加新包时,我指定了实际
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 中)。