Неправильный package.appxmanifest, выбранный msbuild при упаковке в командной строке - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть решение C # с VS 2017, содержащее проект приложения, проект расширения рабочего стола и проект упаковки. Как я уже упоминал в ответе на этот вопрос , я наконец-то получил msbuild для создания одного пакета с x86 и x64 для меня. Однако после того, как я попытался установить из этого пакета, я обнаружил, что msbuild фактически выбрал неправильный package.appxmanifest, потому что у них разные номера версий.

Итак ... У меня есть два package.appxmanifest, один в проекте упаковки и один в моем основном проекте приложения. Когда я собираюсь из мастера в VS 2017, будет использоваться тот, который находится в проекте упаковки, и это правильно. Когда я использую msbuild для сборки только с одной платформой, она также выберет правильную, например:

msbuild .\MyApp.sln /p:Configuration=Release /p:Platform=x86

Только когда я использую msbuild для сборки двух платформ, она будет использовать ту, что в моем основном проекте приложения:

msbuild .\MyApp.sln /p:Configuration=Release /p:AppxBundlePlatforms="x86|x64" /p:UapAppxPackageBuildMode=StoreUpload

Я также попытался построить проект упаковки вместо решения, но поскольку наш проект расширения рабочего стола - только x86, при сборке x64 я получу ошибки о конфигурации.

Вопросы:

  1. Кто-нибудь знает, почему это происходит?
  2. Я также очень озадачен тем, как создавать мультиплатформенность с использованием AppxBundlePlatforms в командной строке. Поскольку я не могу указать платформу, какая платформа используется для сборки?
  3. Должен ли я добавить <AppxBundle>Always</AppxBundle> или <AppxBundle>Never</AppxBundle> в проект упаковки?

1 Ответ

0 голосов
/ 09 ноября 2018
  1. Кто-нибудь знает, почему это происходит?

Это потому, что у вас есть два Package.appxmanifest файла с одинаковым идентификатором в решении. Когда вы создаете пакет приложений с .sln, MSBuild / Visual Studio не может точно знать, какой Package.appxmanifest следует использовать.

  1. Я также очень озадачен тем, как создавать мультиплатформенные приложения с использованием AppxBundlePlatforms в командной строке. Поскольку я не могу указать платформа, какая платформа используется для сборки?

Не уверен, почему вы не можете указать платформу. Чтобы решить эту проблему, вы можете попробовать построить файл проекта .csproj вместо файла решения. Например, при создании проекта приложения вы можете использовать командную строку:

msbuild .\MyApp.csproj /p:Configuration=Release /p:AppxBundlePlatforms="x86|x64"

А затем построить проект упаковки:

msbuild .\YouPackaging.csproj /p:Configuration=Release /p:AppxBundlePlatforms="x86"
  1. Должен ли я добавить Всегда или Никогда к проекту упаковки?

Если вы строите проект, нет необходимости добавлять эти два свойства в файл проекта, эти два свойства используются на уровне решения, и у вас есть проект, который вы не хотите добавлять в комплект:

потому что на уровне решения не ясно, какое приложение должно появиться в комплекте. Чтобы решить эту проблему, откройте каждый файл проекта и добавьте следующие свойства в конце первого элемент

Надеюсь, это поможет.

...