将MsBuild.exe命令作为服务运行时,如何解决“错误APPX0002:任务'ValidateAppxManifest'失败”错误?

时间:2019-06-17 07:39:56

标签: tfs uwp msbuild azure-devops tfsbuild

我尝试运行MSBuild命令以从天蓝色的TFS构建步骤打包UWP应用程序。

"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"

当我登录到远程VM代理并且仅执行以下命令时,该命令执行得很好:程序包的创建与预期的一样好。

但是当通过作为服务运行的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诊断日志中,根本没有出现参数AppxManifestSchemas,可能解释了初始错误。 下一步:查找为什么未将参数发送给任务。

1 个答案:

答案 0 :(得分:0)

找到解决方案! ``我在构建定义中有一个名为``SdkVersion''的变量,该变量用于控制要构建的目标sdk。 ``此变量仅在我的命令行中使用。

实际上,TFS正在为构建配置中的每个变量创建一个环境变量。 在MsBuild过程中,特别是任务'GetSdkPropertyValue'(该任务是ValidateAppxManifest的依赖项',显然添加了一些AppxManifestSchema,其中包括一个NamespaceAlias = m的对象)

,默认情况下(当手动运行时)有一个名为“ SDKVERSION”的参数。它的取值为“ 10.0”,但是由于我有一个同名变量,所以它被“ 10.0.18362.0”覆盖,导致不添加appxmanifestschema ... 给我一个月:p