Chr*_*ler 2 c++ msbuild tfsbuild visual-studio
我正在构建一个新的 TFS 构建服务器,并决定使用 VS 2017 构建工具而不是安装完整版本的 VS。当我尝试构建我们的 C++ 项目时,它抛出以下错误:
Error MSB4019: The imported project "D:\Microsoft.Cpp.Default.props" was not found.
Run Code Online (Sandbox Code Playgroud)
经过数小时的研究,我离解决这个问题不远了。我尝试添加以下注册表设置,但没有帮助。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\11.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
Run Code Online (Sandbox Code Playgroud)
我猜这个产品的微软安装程序坏了。是否有针对此错误的标准修复程序,或者我应该放弃我的努力并简单地安装完整版本?
在项目文件中,我找到了这个条目:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
Run Code Online (Sandbox Code Playgroud)
所以,我猜这意味着变量 VSTargetsPath 以某种方式指向 D: 驱动器的根目录,但我不知道在哪里设置该值。我们当前的构建服务器没有名为 VSTargetsPath 的环境变量集,但它确实缺少注册表项。它还安装了完整版本的 VS。
VS 2017 构建工具失败并出现错误 MSB4019:未找到导入的项目“D:\Microsoft.Cpp.Default.props”
尝试将VCTargetsPath构建配置中的属性作为属性显式传递给 msbuild:
编辑构建的构建定义。
单击进程选项卡。
在“高级”部分中,将 MSBuild 参数设置为包括以下属性:
/p:VCTargetsPath="C:\Program Files (x86)\Microsoft Visual Studio\2017\xxx\Common7\IDE\VC\VCTargets\"
保存构建定义。
注意:您应该将 的值更改VCTargetsPath为VCTargets文件夹的位置。
或者VisualStudioVersion作为属性传递给 msbuild:/p:VisualStudioVersion=15.0
如果您对 的值感兴趣$(VCTargetsPath),可以查看以下线程以获取更多详细信息:
多年来,可以使用注册表项发现 Visual Studio,但随着最近对部署和可扩展性模型的更改,需要一种新方法来发现可能不止一次安装的实例。这些更改促进了更小、更快的默认安装,并辅以其他工作负载和组件的按需安装。
vswhere 设计为可再分发的单文件可执行文件,可在构建或部署脚本中使用,以查找 Visual Studio(或 Visual Studio 系列中的其他产品)所在的位置。例如,如果您知道 MSBuild 的相对路径,则可以找到 Visual Studio 安装的根目录并组合这些路径以找到您需要的内容。
您可以根据脚本可以使用的内容发出不同格式的信息,包括纯文本、JSON 和 XML。其他常见格式也可以接受拉取请求。
vswhere 包含在 Visual Studio 2017 版本 15.2 及更高版本的安装程序中,可以在以下位置找到:%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe。