如何修复将 MsBuild.exe 命令作为服务运行时"error APPX0002: Task 'ValidateAppxManifest' failed"错误?



我尝试运行 MSBuild 命令来从 azure TFS 生成步骤打包 UWP 应用程序。

"C:Program Files (x86)Microsoft Visual Studio2017ProfessionalMSBuild15.0BinMSBuild.exe" "C:TFSagent_work1sMyProject.sln" /t:Build /p:Configuration=master /p:Platform=x86"

当我登录到远程 VM 代理并且我只是执行以下命令时,此命令执行良好:包按预期创建得很好。

但是当命令通过作为服务运行的TFS代理执行时,我收到以下错误:

2019-06-16T22:15:16.0141845Z C:Program Files (x86)Microsoft Visual Studio2017ProfessionalMSBuildMicrosoftVisualStudiov15.0AppxPackageMicrosoft.AppXPackage.Targets(2638,5): error APPX0002: Task 'ValidateAppxManifest' failed. Namespace prefix 'm' is not defined. [C:TFSagent_work1sMyProject.vcxproj]
2019-06-16T22:15:16.0142853Z C:Program Files (x86)Microsoft Visual Studio2017ProfessionalMSBuildMicrosoftVisualStudiov15.0AppxPackageMicrosoft.AppXPackage.Targets(2638,5): error APPX0002:  [C:TFSagent_work1sMyProject.vcxproj]
2019-06-16T22:15:16.9689847Z C:Program Files (x86)Microsoft Visual Studio2017ProfessionalMSBuildMicrosoftVisualStudiov15.0AppxPackageMicrosoft.AppXPackage.Targets(2638,5): error MSB4018: The "ValidateAppxManifest" task failed unexpectedly. [C:TFSagent_work1sMyProject.vcxproj]
2019-06-16T22:15:16.9690436Z C:Program Files (x86)Microsoft Visual Studio2017ProfessionalMSBuildMicrosoftVisualStudiov15.0AppxPackageMicrosoft.AppXPackage.Targets(2638,5): error MSB4018: System.Xml.XPath.XPathException: Namespace prefix 'm' is not defined. [C:TFSagent_work1sMyProject.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 Kits10\Include10.0.18362.0WinRTFoundationManifestSchema.xsd
NamespaceAlias=m
NamespaceUri=http://schemas.microsoft.com/appx/manifest/foundation/windows10
C:Program Files (x86)Windows Kits10\Include10.0.18362.0WinRTUapManifestSchema.xsd
NamespaceAlias=uap
NamespaceUri=http://schemas.microsoft.com/appx/manifest/uap/windows10 (TaskId:271)

编辑 2

在非工作 msbuild 诊断日志中,参数 AppxManifestSchemas 根本不显示,可能解释了初始错误。 下一步:查找参数未发送到任务的原因。

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

问题是,TFS 正在为生成配置中的每个变量创建一个环境变量。 ​ 在MsBuild PRocess期间,特别是任务"GetSdkPropertyValue"(任务是ValidateAppxManifest的依赖项,它显然添加了一些AppxManifestSchema,包括一个带有NamespaceAlias=m的任务)

,有一个名为"SDKVERSION"的参数..默认情况下(手动运行时),它采用值"10.0",但由于我有一个同名的变量,它被"10.0.18362.0"覆盖,导致没有添加 appxmanifestschema... ​ 花了我一个月:p

最新更新