【问题标题】:Visual Studio 2019 - MSBuild tools version 12 missingVisual Studio 2019 - 缺少 MSBuild 工具版本 12
【发布时间】:2020-09-14 21:56:16
【问题描述】:

我希望我们的开发人员为我们的所有项目(如果可能)使用一个版本的 Visual Studio - 为此,我要求他们将 VS2019 用于最初在 VS2010 中创建然后迁移的一些项目到VS2013。

在 VS2019 中运行这些旧的 webforms 应用程序之一时发生了运行时行为变化。我不确定为什么它会有所不同,因为所使用的 dll 是相同的,并且编译的 IL 对于所讨论的方法是相同的,但目前我并不真正关心“修复”它,因为它需要编写代码更改和回归测试整个应用程序;一条我暂时想避开的路。

我想做的是确保使用指定的工具构建 VS2019,以便我们保留旧的行为。项目文件引用了工具版本 12(未安装 VS2013),但是当 Visual Studio 构建时,我在 MSBuild 输出中看到以下内容:

项目文件包含 ToolsVersion="12.0"。此工具集可能未知或缺失,在这种情况下,您可以通过安装适当版本的 MSBuild 来解决此问题,或者出于政策原因,该构建可能已被强制使用特定的 ToolsVersion。将项目视为具有 ToolsVersion="Current"。更多信息请见http://go.microsoft.com/fwlink/?LinkId=293424

我安装了 MSBuild Tools 2013,但在重新启动之前或之后都没有解决问题。我也尝试使用工具版本 15 并得到相同的错误(安装了 VS2017)。

来自 VS2019 开发命令提示符的 MSBuild 有效,但我必须将 14.0 Web 应用程序目标复制到名为“16.0”的新文件夹中。如果不进行更多在线搜索,我不确定为什么有 14.0 文件夹但没有 12.0 或 15.0 文件夹。

这是愚蠢的差事,还是我错过了一些简单的事情?

【问题讨论】:

  • ,我建议你可以试试我的解决方案。

标签: visual-studio msbuild


【解决方案1】:

来自 VS2019 开发命令提示符的 MSBuild 有效,但我必须复制 14.0 web 应用程序的目标是一个名为“16.0”的新文件夹。我不是 确定为什么有 14.0 文件夹但没有 12.0 或 15.0 文件夹 做更多的在线搜索。

更新 1

这只是一个提示警告,以确保您最好使用相关的 MSBuild 版本来构建项目。它被设计为提醒消息。

但实际上,MSBuild 确实添加了向后兼容功能。

该消息只是警告而不是错误,不会中断构建过程。如果它破坏了构建过程,它可以证明不支持向后兼容。

你可以测试一下:用VS2019构建一个VS2017或者VS2015的项目,我相信它可以构建成功。

===============================================

每个版本的 VS 都会创建一个为相应的 MSBuild 版本构建的项目。

例如,在VS2010创建的项目中,它的ToolsVersion="4.0",所以当你从VS2010(msbuild v4.0)使用MSBuild时,它会在没有警告的情况下构建。

VS2013-->ToolsVersion=12.0, VS2015-->ToolsVersion=14.0, VS2017-->ToolsVersion=15.0, VS2019--> ToolsVersion=Current

所以当你构建项目时,你应该尝试相关的msbuild版本来构建它们。

虽然MSBuild支持向后兼容,但问题总是以警告的形式出现,一直困扰着我们在项目迁移过程中。

解决方案

要解决这个问题,你应该使用相关的MSBuild来构建具有相应ToolsVersion的项目。

如果您想在 VS2017 中构建它们,您应该在每个项目的 xxx.xxproj 文件中将 ToolsVersion 更改为 15.0

如果你想在 VS2019 中构建它们,你应该在每个项目的 xxx.xxproj 文件中将 ToolsVersion 更改为 Current

更多信息,您可以参考my answer in this similar issue

【讨论】:

  • 那么你的意思是,总的来说,MSBuild 不是完全向后兼容的,每个版本的 Visual Studio 真的只能使用与 VS 版本绑定的 MSBuild 版本吗?
  • 其实MSBuild高版本支持低版本。很抱歉一开始没有描述这一点。这只是一个提示信息,确保您最好使用 MSBuild 来构建相应的项目。但是,它不会中断构建过程,并且在更高版本的 MSBuild 中仍然可以成功构建。此功能是在设计 MSBuild 时添加的。你可以尝试测试一下:使用VS2019构建一个VS2017或VS2015项目,我相信它会成功构建它们而没有任何错误。
  • 而如果失败,可以证明不支持向后兼容。所以你不必太担心它,它仍然可以成功构建任何项目。但如果你真的想处理这个问题,你可以试试我的回答来消除这个警告。
猜你喜欢
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 2021-08-26
  • 2020-11-07
  • 2019-09-03
  • 1970-01-01
  • 2019-11-30
  • 2018-06-14
相关资源
最近更新 更多