我刚刚承诺将 UWP 应用程序添加到源代码管理中。然而,我的 CI 服务器(Jenkins)似乎不喜欢这样:
错误 MSB4019:导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\WindowsXaml 14.0\Microsoft.Windows.UI.Xaml.CSharp.targets" 没找到。确认声明中的路径是 正确,并且该文件存在于磁盘上。
这源于以下 UWP 项目文件导入:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
在我的本地计算机上,我可以看到该文件位于:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\WindowsXaml\v15.0\Microsoft.Windows.UI.Xaml.CSharp.Targets
显然,这是由于我本地安装了 Visual Studio 2017。但是,CI 服务器没有安装 Visual Studio。我想这就是为什么
MSBuildExtensionsPath
解析为错误中提到的路径。
CI 服务器上已安装以下项目:
我认为这些将包含必要的依赖项,但我在任何地方都找不到
Microsoft.Windows.UI.Xaml.CSharp.targets
。
复制本地机器上的目录
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\WindowsXaml\v15.0
到 CI 服务器
C:\Program Files (x86)\MSBuild\Microsoft\WindowsXaml\v14.0
似乎解决了错误,但感觉很hacky。
有没有办法解决这个问题,而无需在 CI 服务器上安装 Visual Studio 2017 或手动复制/重命名文件?
这仍然是最新版本 VSBT 的问题。唯一要报告的是错误从 v14 更改为 v15。将同一目录复制到 v15 后,错误再次消失。然而,另一个看似无关的错误出现了:
C:\Program Files (x86)\Microsoft Visual Studio�7\BuildTools\MSBuild .0\Bin\Microsoft.Common.CurrentVersion.targets(1124,5): 错误 MSB3644:框架的参考程序集 未找到“.NETCore,版本=v5.0”。要解决此问题,请安装 此框架版本的 SDK 或 Targeting Pack 或重新定位您的 应用程序到您拥有 SDK 的框架版本 或已安装目标包。请注意,程序集将被解析 来自全局程序集缓存 (GAC) 并将用于代替 参考组件。因此您的装配可能不正确 针对您想要的框架。
.NETCore,Version=v5.0
通过将以下目录从我的本地计算机复制到构建服务器解决了错误:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v5.0
虽然UWP构建成功,但没有生成appxbundle。这似乎表明 VSBT 缺少另一个依赖项。
我们转向了 Azure DevOps,但我们也与 Jenkins 合作了几年。 Jenkins 在安装了 Visual Studio 的计算机上运行,我们已将其更新到最新版本。仅当开发人员使用 VS2019 并且服务器更新到 VS2022 时,由于 .target 引用,我们才遇到问题。在 CI 服务器上安装 Visual Studio 看起来是最佳实践。
也就是说,根据 this StackOverflow 帖子,您可以使用构建工具。 转到 https://visualstudio.microsoft.com/downloads/ 向下滚动,Visual Studio 工具、Visual Studio 2022 构建工具。