jenkinsvisual-studio-2013msbuildvisual-studio-2017visual-studio-2017-build-tools

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


I have a Visual Studio Solution with multiple projects. Few of them are of Visual studio 2017 and few are of Visual studio 2013. The difference is because of the use cases of the projects. Visual studio has the option to select toolset for each project. Now I need to create build through Jenkins using MSBuild. How can I set toolset for projects in MSBuild?


Solution

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

    First, please make sure that VS2013 and VS2017 are installed in your local agent.

    The Platform Toolset from VS IDE is stored in xxx.vcxproj file. It is stores as PlatformToolset xml node.

    Like <PlatformToolset>v141</PlatformToolset>

    enter image description here

    enter image description here

    v142 means VS2019, v141 means VS2017, v140 means VS2015, v120 means VS2013

    So for your situation, you can just change the PlatformToolset.

    Solution

    So you can use -p:PlatformToolset=xxx in msbuild command line to specify a specific toolset version to build a project.

    Note: this does not permanently change the value in xxx.vcxproj, but uses this specific value when building the project.

    1) If you want to build the whole solution, if you want to use the value in the whole solution(every project uses this toolset), use this:

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

    Or if you want to use different toolset for different projects in msbuild command line:

    -- change PlatformToolset in every xxx.vsxproj file directly as you want and then build your solution

    -- use msbuild script to combine all the projects of your solution and then build this script directly to get what you want. See my answer and change to use <Properties>PlatformToolset=xxx</Properties>.

    2) If you want to build the project, you can overwrite the PlatformToolset in command line to specify it.

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