Как исправить ошибку «APPX0002: ошибка задачи« ValidateAppxManifest »» при запуске команды MsBuild.exe в качестве службы? - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь запустить команду MSBuild для упаковки приложения UWP с этапа сборки Azure TFS.

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe" "C:\TFSagent\_work\1\s\MyProject.sln" /t:Build /p:Configuration=master /p:Platform=x86"

Эта команда хорошо выполняется, когда я захожу на удаленный агент ВМ и просто выполняю команду: пакет создается нормально, как и ожидалось.

Но когда команда выполняется через агент TFS, который работает как служба, я получил следующую ошибку:

2019-06-16T22:15:16.0141845Z C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\AppxPackage\Microsoft.AppXPackage.Targets(2638,5): error APPX0002: Task 'ValidateAppxManifest' failed. Namespace prefix 'm' is not defined. [C:\TFSagent\_work\1\s\MyProject.vcxproj]
2019-06-16T22:15:16.0142853Z C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\AppxPackage\Microsoft.AppXPackage.Targets(2638,5): error APPX0002:  [C:\TFSagent\_work\1\s\MyProject.vcxproj]
2019-06-16T22:15:16.9689847Z C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\AppxPackage\Microsoft.AppXPackage.Targets(2638,5): error MSB4018: The "ValidateAppxManifest" task failed unexpectedly. [C:\TFSagent\_work\1\s\MyProject.vcxproj]
2019-06-16T22:15:16.9690436Z C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\AppxPackage\Microsoft.AppXPackage.Targets(2638,5): error MSB4018: System.Xml.XPath.XPathException: Namespace prefix 'm' is not defined. [C:\TFSagent\_work\1\s\MyProject.vcxproj]
...

Работает: Microsoft Visual Studio Team Foundation Server версии 16.131.28507.4

Агент настроен как служба для Windows 10 VM с использованием локального пользователя, которому предоставлены права администратора.

Шаг сборки так же прост, как командная строка, выполняемая над командой. Я пытался добавить /nodeReuse:false /m:1.

Нет никакого использования пространства имен 'm' в соответствующем манифесте (и, как он работает, когда запускается «вручную», я полагаю, сам манифест в порядке)

Я просто ожидаю, что команда будет работать одинаково при запуске от пользователя или службы.

РЕДАКТИРОВАТЬ 1:

Возможно, я обнаружил, откуда исходит пространство имен 'm' (при использовании /v:diag:

Task Parameter:
      AppxManifestSchemas=
          C:\Program Files (x86)\Windows Kits\10\\Include\10.0.18362.0\WinRT\FoundationManifestSchema.xsd
                  NamespaceAlias=m
                  NamespaceUri=http://schemas.microsoft.com/appx/manifest/foundation/windows10
          C:\Program Files (x86)\Windows Kits\10\\Include\10.0.18362.0\WinRT\UapManifestSchema.xsd
                  NamespaceAlias=uap
                  NamespaceUri=http://schemas.microsoft.com/appx/manifest/uap/windows10 (TaskId:271)

РЕДАКТИРОВАТЬ 2

в нерабочем журнале msbuild diag параметр AppxManifestSchemas вообще не отображается, что, вероятно, объясняет первоначальную ошибку. Следующий шаг: выяснить, почему параметр не отправляется на задание.

1 Ответ

0 голосов
/ 16 июля 2019

Решение найдено! У меня была переменная в моем определении сборки под названием «SdkVersion», которая использовалась для управления целевым SDK, на котором я хотел построить. Эта переменная использовалась только в моей командной строке.

Дело в том, что TFS создает переменную среды для каждой переменной в конфигурации сборки. Во время MsBuild PRocess и, в частности, задачи 'GetSdkPropertyValue' (задача, которая является зависимостью для ValidateAppxManifest), которая, по-видимому, добавляет некоторую AppxManifestSchema, в том числе одну с NamespaceAlias ​​= m)

, есть параметр с именем 'SDKVERSION' .. по умолчанию (при запуске вручную) он принимает значение '10 .0', но поскольку у меня была переменная с тем же именем, он был переопределен с '10 .0.18362.0 ', что приводит к не добавляя appxmanifestschema ... Взял у меня месяц: р

...