tfs - 将 MsBuild.exe 命令作为服务运行时,如何修复“错误 APPX0002:任务 'ValidateAppxManifest' 失败”错误?
问题描述
我尝试运行 MSBuild 命令以从 azure 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 根本没有出现,可能解释了初始错误。下一步:查找参数未发送到任务的原因。
解决方案
找到了解决方案!我的构建定义中有一个名为“SdkVersion”的变量,用于控制我想要构建的目标 sdk。此变量仅在我的命令行中使用。
问题是,TFS 正在为构建配置中的每个变量创建一个环境变量。在 MsBuild 进程期间,特别是任务“GetSdkPropertyValue”(这是 ValidateAppxManifest 的依赖项,显然添加了一些 AppxManifestSchema,包括一个带有 NamespaceAlias=m 的任务)</p>
,有一个名为“SDKVERSION”的参数。默认情况下(手动运行时)它采用值“10.0”,但由于我有一个同名的变量,它被“10.0.18362.0”覆盖,这导致不添加appxmanifestschema ...花了我一个月的时间:p
推荐阅读
- python - 当我在基于类的视图中应用过滤器时,如何在 django 中使用分页。网址总是不断变化我如何跟踪网址
- go - 在 Golang 中,为什么我不能比较 []"k8s.io/api/core/v1".ServicePort?
- javascript - Javascript - 在浏览器中打开 PDF blob 并带有漂亮的 url
- google-apps-script - 制作文件副本时,App Script 触发器可以粘住吗?
- android - 在 Xamarin Forms - Android 中关闭应用程序时,使内容提供者像服务一样工作并保持活动状态
- bash - 如何从 find 中获取 pwd 到 grep?
- gitlab - 如何使用 Gitlab CI 依赖于作业
- javascript - 是否有一个简单的正则表达式来检查日期格式模式?
- javascript - 为什么表格计算返回nan?
- html - 设置为无时重复背景图像