Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Note
This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here
You can change the Toolset for projects and solutions in one of three ways:
by using the
/ToolsVersionswitch (or/tv, for short) when you build the project or solution from the command lineby setting the
ToolsVersionparameter on the MSBuild taskby setting the
$(ProjectToolsVersion)property on a project within a solution. This lets you build a project in a solution with a Toolset version that differs from that of the other projects.
Override the ToolsVersion Settings of Projects and Solutions on Command Line Builds
Although Visual Studio projects typically build with the ToolsVersion specified in the project file, you can use the /ToolsVersion (or /tv) switch on the command line to override that value and build all of the projects and their project-to-project dependencies with a different Toolset. For example:
msbuild.exe someproj.proj /tv:12.0 /p:Configuration=Debug
In this example, all projects are built using ToolsVersion 12.0. (However, see the section "Order of Precedence" later in this topic.)
When using the /tv switch on the command line, you can optionally use the $(ProjectToolsVersion) property in individual projects to build them with a different ToolsVersion value than the other projects in the solution.
Override the ToolsVersion Settings Using the ToolsVersion Parameter of the MSBuild Task
The MSBuild task is the primary means for one project to build another. To enable the MSBuild task to build a project with a different ToolsVersion than the one specified in the project, it provides an optional task parameter named ToolsVersion. The following example demonstrates how to use this parameter:
Create a file that's named
projectA.projand that contains the following code:<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0"> <Target Name="go" > <Message Text="projectA.proj" /> <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" /> <Message Text="MSBuildToolsPath: $(MSBuildToolsPath)" /> <MSBuild Projects="projectB.proj" ToolsVersion="2.0" Targets="go" /> </Target> </Project>Create another file that's named
projectB.projand that contains the following code:<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0"> <Target Name="go"> <Message Text="projectB.proj" /> <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" /> <Message Text="MSBuildToolsPath: $(MSBuildToolsPath)" /> </Target> </Project>Enter the following command at a command prompt:
msbuild projectA.proj /t:go /toolsversion:3.5The following output appears. For
projectA, the/toolsversion:3.5setting on the command line overrides theToolsVersion=12.0setting in theProjecttag.ProjectBis called by a task inprojectA. That task hasToolsVersion=2.0, which overrides the otherToolsVersionsettings forprojectB.Output: projectA.proj MSBuildToolsVersion: 3.5 MSBuildToolsPath: C:\Windows\Microsoft.NET\Framework\v3.5 projectB.proj MSBuildToolsVersion: 2.0 MSBuildToolsPath: C:\Windows\Microsoft.NET\Framework\v2.0.50727
Order of Precedence
The order of precedence, from highest to lowest, used to determine the ToolsVersion is:
The
ToolsVersionattribute on the MSBuild task used to build the project, if any.The
/toolsversion(or/tv) switch that's used in the msbuild.exe command, if any.If the environment variable
MSBUILDTREATALLTOOLSVERSIONSASCURRENTis set, then use the currentToolsVersion.If the environment variable
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENTis set and theToolsVersiondefined in the project file is greater than the currentToolsVersion, use the currentToolsVersion.If the environment variable
MSBUILDLEGACYDEFAULTTOOLSVERSIONis set, or ifToolsVersionis not set, then the following steps are used:The
ToolsVersionattribute of the Project element of the project file. If this attribute doesn’t exist, it is assumed to be the current version.The default tools version in the MSBuild.exe.config file.
The default tools version in the registry. For more information, see Standard and Custom Toolset Configurations.
If the environment variable
MSBUILDLEGACYDEFAULTTOOLSVERSIONis not set, then the following steps are used:If the environment variable
MSBUILDDEFAULTTOOLSVERSIONis set to aToolsVersionthat exists, use it.If
DefaultOverrideToolsVersionis set in MSBuild.exe.config, use it.If
DefaultOverrideToolsVersionis set in the registry, use it.Otherwise, use the current
ToolsVersion.
See Also
Multitargeting
MSBuild Concepts
Toolset (ToolsVersion)
Standard and Custom Toolset Configurations