Какой PhoneProductId использовать для приложения UWP, которое не является обновлением

Я разрабатываю новое приложение UWP для Windows 10 Desktop и Mobile. 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)?


person IInspectable    schedule 29.04.2018    source источник
comment
@ShubhamSahu: я не обновляю приложение с Windows Phone. Это свежий проект UWP. Поля Package/Identity/Name, Package/Identity/Publisher и Package/Properties/PublisherDisplayName имеют правильные записи, снятые с панели инструментов разработчика Windows. При связывании приложения с магазином PhoneProductId не заполняется автоматически.   -  person IInspectable    schedule 29.04.2018
comment
@ShubhamSahu: я не прошу решения, которое работает. Я уже нащупал что-то вместе, что делает. Я ищу твердые факты, в лучшем случае документацию, которая говорит мне, какое значение использовать. В конце концов, я понятия не имею, как был сгенерирован этот GUID. Кто знает, может быть, это хешированное значение вашего Package/Identity/Name.   -  person IInspectable    schedule 29.04.2018
comment
Когда вы создаете новый проект, видимо, Visual Studio назначает новый случайный GUID для PhoneProductId в Package.appxmanifest. Я не думаю, что это должно быть чем-то особенным, поскольку я разработал несколько UWP (не обновлений) и никогда не заботился об этом. Проблем пока нет за несколько лет.   -  person Mehrzad Chehraz    schedule 30.04.2018
comment
@MehrzadChehraz: я использую C++/WinRT. Шаблоны проектов C++/WinRT отсутствуют. Можете ли вы опубликовать один из ваших автоматически сгенерированных GUID, чтобы я мог хотя бы определить, какого они типа.   -  person IInspectable    schedule 30.04.2018


Ответы (1)


Это просто обычный GUID; вы можете скопировать его из основного идентификатора вашего приложения.

Посмотрите в C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ProjectTemplates\CSharp\Windows UAP\1033\BlankApplication\Package-managed.appxmanifest (путь может немного отличаться в зависимости от используемой версии VS). Этот файл показывает, что и Identity, и PhoneIdentity установлены на $guid9$:

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

а также

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

Предположительно GUID с 1 по 8 используются для чего-то еще :). Из документов шаблона проекта видно, что это просто ГУИД. Ничего особенного

person Peter Torr - MSFT    schedule 30.04.2018
comment
Это (отчасти) подразумевает, что Package/Identity/Name и Package/mp:PhoneIdentity/PhoneProductId должны быть одинаковыми. По крайней мере, для индивидуальной лицензии разработчика Package/Identity/Name не является GUID. Я бы хотел, чтобы детали были явно указаны в документации, хотя я полагаю, что вы правы, что единственными требованиями к этому GUID является то, что он уникален и не используется для идентификации пакета в Магазине Windows Phone. - person IInspectable; 30.04.2018
comment
Ну, им нужно поместить что-то уникальное в шаблон проекта, даже если вы можете просто нажать F5 для решения, поэтому руководство лучше, чем большинство вещей. Имена проектов, такие как WindowsApplication1, не очень уникальны в большинстве ящиков разработки ;-) - person Peter Torr - MSFT; 01.05.2018
comment
Это понятно, хотя это несколько обесценивает ваш ответ. Если автоматически сгенерированное значение для Package/Identity/Name достаточно хорошо для тестирования, даже если оно не совсем правильное, то то же самое относится и к Package/mp:PhoneIdentity/PhoneProductId. Как всегда, код — это не то же самое, что документация. Мне придется пока не принимать этот ответ, пока не возникнет проблема с документацией было решено. В любом случае, этот ответ помог мне понять, какое значение используется в проекте, созданном мастером, поэтому голосование по-прежнему оправдано. - person IInspectable; 01.05.2018