哪个 PhoneProductId 用于非升级的 UWP 应用

Posted

技术标签:

【中文标题】哪个 PhoneProductId 用于非升级的 UWP 应用【英文标题】:Which PhoneProductId to use for a UWP app that is not an upgrade 【发布时间】:2018-10-09 18:31:38 【问题描述】:

我正在为 Windows 10 桌面版和移动版开发新的 UWP 应用程序。 PhoneIdentity 似乎是 .appxmanifest 文件中的必填项。虽然 MSDN 明确说明了 PhoneProductId 应该是什么,但如果应用程序是升级版,它没有说明使用什么值,以防万一。

由于此应用程序不是升级,我的第一反应是使用空 GUID (00000000-0000-0000-0000-000000000000)。这样做会导致 Visual Studio 在尝试部署应用以进行调试时返回错误:

1>------ Deploy started: Project: MyApp, Configuration: Debug ARM ------
Deploying to Phone Internal Storage...
Updating the layout...
Copying files: Total <1 mb to layout...
Checking whether required frameworks are installed...
Registering the application to run from layout...
DEP0700: Registration of the app failed. [0x80073CF6] Package could not be registered. (Exception from HRESULT: 0x80073CF6)
========== Deploy: 0 succeeded, 1 failed, 0 skipped ==========

PhoneProductId 设置为随机 GUID 似乎可以解决部署问题,尽管没有任何文档我对做某事感到有点不安,这似乎有效,但不知道它为什么有效。

是否有特定的 GUID 可用于非升级应用?如果不需要,此 GUID 是否需要遵循任何特定协议(例如特定版本或类型,或从应用程序 Identity Name 生成)?

【问题讨论】:

@ShubhamSahu:我没有从 Windows Phone 更新应用程序。这是一个全新的 UWP 项目。字段 Package/Identity/NamePackage/Identity/PublisherPackage/Properties/PublisherDisplayName 具有从 Windows 开发人员仪表板中删除的正确条目。将应用与商店关联时,PhoneProductId 不会自动填写。 @ShubhamSahu:我并不是要一个看似可行的解决方案。我已经一起摸索了一些东西。我正在寻找可靠的事实,充其量是文档,告诉我使用什么价值。毕竟,我不知道那个 GUID 是如何生成的。谁知道呢,可能是你的Package/Identity/Name 的哈希值。 当您创建一个新项目时,显然 Visual Studio 会为 Package.appxmanifest 中的 PhoneProductId 分配一个新的随机 GUID。我不认为它应该有什么特别的,因为我已经开发了多个 UWP(不是升级)并且从不关心它。几年后至今没有任何问题。 @MehrzadChehraz:我正在使用 C++/WinRT。没有 C++/WinRT 项目模板。您能否发布一个自动生成的 GUID,以便我至少可以确定它们是什么类型。 【参考方案1】:

这只是一个普通的 GUID;您可以从应用的主要身份复制它。

查看C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ProjectTemplates\CSharp\Windows UAP\1033\BlankApplication\Package-managed.appxmanifest(路径可能略有不同,具体取决于您使用的 VS 版本)。此文件显示IdentityPhoneIdentity 均设置为$guid9$

<Identity
  Name="$guid9$"
  Publisher="$XmlEscapedPublisherDistinguishedName$"
  Version="1.0.0.0" />

<mp:PhoneIdentity PhoneProductId="$guid9$" 
  PhonePublisherId="00000000-0000-0000-0000-000000000000"/>

大概 GUID 1 到 8 用于其他用途 :)。您可以从the Project Template docs 看到它只是一个 GUID。没什么特别的

【讨论】:

这(有点)暗示,Package/Identity/NamePackage/mp:PhoneIdentity/PhoneProductId 应该是相同的。不过,至少对于个人开发者许可证而言,Package/Identity/Name 不是 GUID。我希望在文档中明确说明详细信息,尽管我相信您是正确的,该 GUID 的唯一要求是,它是唯一的并且不用于标识 Windows Phone 商店中的包。 好吧,他们需要在项目模板中添加一些独特的东西,这样你就可以直接 F5 解决方案,所以 Guid 比大多数东西都要好。像WindowsApplication1 这样的项目名称在大多数开发盒中并不是很独特;-) 可以理解,尽管它在某种程度上使您的答案无效。如果Package/Identity/Name 的自动生成值足以进行测试,即使最终不正确,那么Package/mp:PhoneIdentity/PhoneProductId 也是如此。与往常一样,代码与文档不同。我现在将不得不不接受这个答案,直到documentation issue 得到解决。无论如何,这个答案帮助我理解了在向导生成的项目中使用了什么价值,所以投票仍然是合理的。

以上是关于哪个 PhoneProductId 用于非升级的 UWP 应用的主要内容,如果未能解决你的问题,请参考以下文章

vs2013怎么升级成vs2015

JVM升级七(启动参数)

热重载不适用于升级的(.Net 5 -> .Net 6)项目

使用哪个编辑器?用于编码 c/c++ [关闭]

用于非 SPA 的 Laravel Sanctum API 令牌

或下载器现在升级是啥软件