我正在尝试构建一些UWP库,但收到此错误:
D:\ a \ ZXing.Net.Xamarin \ ZXing.Net.Xamarin \ Source \ ZXing.Net.Mobile.WindowsUniversal \ ZXing.Net.Mobile.WindowsUniversal.csproj(155,3):错误MSB4019:导入的项目“ C:\ Program Files(x86)\ MSBuild \ Microsoft \ WindowsXaml \ v11.0 \ Microsoft.Windows.UI.Xaml.CSharp.targets“没有找到。确认声明中的路径是正确,并且文件存在于磁盘上。
。csproj文件中的import子句看起来像这样:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
因此,我尝试通过Chocolatey(均使用this package和this other而不是Windows10SDK,因为它在尝试安装时会给出错误)在Windows2019 VM中以编程方式安装UWP工作负载:
- run: |
choco install visualstudio2019-workload-universal
choco install visualstudio2019-workload-universalbuildtools
但是这似乎并没有解决(显然软件包已成功安装),因为我仍然不断收到该编译错误。
也尝试包括可选软件包,无济于事:
choco install visualstudio2019-workload-universal --package-parameters "--includeOptional"
UPDATE:原来我的CI VM已经具有文件Microsoft.Windows.UI.Xaml.CSharp.targets
,但是它位于C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\WindowsXaml\v16.0
中(以及该文件的其他版本在该文件下面的子文件夹中)。有关更多详细信息,请查看我的答案。
如果Chocolatey似乎无法正常工作,则可以尝试使用CLI修改Visual Studio。例如,从Powershell运行时,以下内容将Universal Platform工作负载添加到VS,而没有任何提示。
& "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe" modify `
--installPath "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise" `
--add Microsoft.VisualStudio.Workload.Universal --passive --norestart
Visual Studio Enterprise 2019包含在Windows Server 2019环境中,而Visual Studio Enterprise 2017包含在Windows Server 2016 R2所有环境中。
我在此处创建了示例存储库:https://github.com/adam7/modify-visual-studio-install
您可以在Visual Studio文档中找到一组Command-line parameter examples for Visual Studio installation和Visual Studio workload and component IDs以及如何进行Use command-line parameters to install Visual Studio。
事实证明,安装在GithubActions VM中的VS2019版本已经包含UWP组件(以及其他组件,例如Xamarin.iOS,Xamarin.Android,Xamarin.Mac等);问题是我的构建在某种程度上默认使用了不知道这些扩展名的旧版本的MSBuild(位于C:/windows/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe
中的版本)。
[一旦我确定使用与VS2019捆绑在一起的MSBuild版本(%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe
中的那个),一切就会再次开始工作。
要在我的特定版本中修复它,我必须修改build.cake
文件(IMO可能实际上是CAKE中的错误,默认情况下未检测到正确版本的MSBuild ...)。如果要查看确切的修补程序(使用vswhere
定位MSBuild),则为this。