如何为同一解决方案 C++ 使用不同版本的 MSBuild

How to Use different versions of MSBuild for same solution C++

我有一个包含多个项目的 Visual Studio 解决方案。其中很少有 Visual studio 2017 年的,也很少有 Visual studio 2013 年的。不同之处在于项目的用例。 Visual studio 可以为每个项目选择 select 工具集。现在我需要使用 MSBuild 通过 Jenkins 创建构建。如何在 MSBuild 中为项目设置工具集?

How to Use different versions of MSBuild for same solution C++

首先,请确保您的本地代理中安装了VS2013VS2017 .

来自 VS IDE 的平台工具集存储在 xxx.vcxproj 文件中。它存储为 PlatformToolset xml 节点。

喜欢<PlatformToolset>v141</PlatformToolset>

v142表示VS2019,v141表示VS2017,v140表示VS2015,v120表示VS2013

因此,对于您的情况,您只需更改 PlatformToolset。

解决方案

所以你可以在msbuild命令行中使用-p:PlatformToolset=xxx来指定特定的工具集版本来构建项目。

注意:这不会永久更改xxx.vcxproj中的值,而是在构建项目时使用此特定值。

1) 如果您想构建整个解决方案, 如果你想在整个解决方案中使用这个值(每个项目都使用这个工具集),使用这个:

msbuild xxx.sln -t:build -p:PlatformToolset=xxx

如果你想在msbuild命令行中为不同的项目使用不同的工具集:

-- 根据需要直接更改每个 xxx.vsxproj 文件中的 PlatformToolset,然后构建解决方案

-- 使用 msbuild 脚本组合您解决方案的所有项目,然后直接构建此脚本以获得您想要的。 See my answer 并改为使用 <Properties>PlatformToolset=xxx</Properties>.

2)如果要构建项目,可以在命令行中覆盖PlatformToolset指定。

msbuild xxx.vcxproj -t:build -p:PlatformToolset=xxx