这是一个已知问题,记录在这里:
https ://community.embarcadero.com/article/technical-articles/16202-msbuildtoolspath-is-not-specified-for-the-toolsversion
此错误是由注册表中的错误值引起的。在 32 操作系统上,运行 regedit 并导航到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild。在 64 位操作系统上,运行 regedit 并导航到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild。首先,通过选择 File | 备份此注册表项 出口。接下来,查看 ToolsVersions 键下方的数字。删除在 MSBuild 级别找不到的任何数字。... 有轶事证据表明此注册表项不平衡是由卸载某些版本的 Visual Studio 引起的,但目前尚未得到证实。
由于我一直在安装/卸载各种 Visual Studio 版本(包括预览版),猜测确实是由它引起的
错误“指定了默认工具版本“2.0”,但找不到其定义。” 如果您按照第一篇文章的建议删除了 2.0 密钥,则可能会出现。解决方案是在 x32 和 x64 提到的注册表位置中编辑 MSBuild 键下的每个值,并将 DefaultToolsVersion 更改为 14.0 或已安装的其他最高 MSBuild 工具版本
请注意,在 x64 机器上,您需要为 x32 和 x64 注册表位置修复这两个问题,因为 IDE 是 32 位进程,如果您仅修复 x64 位置,它将在内部失败,在源代码中的 uses 子句中强调所有标准单位代码并显示“无法解析单元名称 xx”</p>
安装它也可能有用:
https ://www.microsoft.com/en-us/download/confirmation.aspx?id=48159
了解这也可能很有用(从https://msdn.microsoft.com/en-us/library/bb383985.aspx复制):
优先顺序
用于确定 ToolsVersion 的优先级顺序(从最高到最低)是: 用于构建项目的 MSBuild 任务的 ToolsVersion 属性(如果有)。
msbuild.exe 命令中使用的 /toolsversion(或 /tv)开关(如果有)。
如果设置了环境变量 MSBUILDTREATALLTOOLSVERSIONSASCURRENT,则使用当前的 ToolsVersion。
如果设置了环境变量 MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT 并且项目文件中定义的 ToolsVersion 大于当前的 ToolsVersion,则使用当前的 ToolsVersion。
如果设置了环境变量 MSBUILLDLEGACYDEFAULTTOOLSVERSION,或者未设置 ToolsVersion,则使用以下步骤:
项目文件的 Project 元素的 ToolsVersion 属性。如果此属性不存在,则假定为当前版本。
MSBuild.exe.config 文件中的默认工具版本。
注册表中的默认工具版本。有关详细信息,请参阅标准和自定义工具集配置。
如果未设置环境变量 MSBUILLEGACYDEFAULTTOOLSVERSION,则使用以下步骤:
如果环境变量 MSBUILDDEFAULTTOOLSVERSION 设置为存在的 ToolsVersion,请使用它。
如果在 MSBuild.exe.config 中设置了 DefaultOverrideToolsVersion,请使用它。
如果在注册表中设置了 DefaultOverrideToolsVersion,请使用它。
否则,使用当前的 ToolsVersion。