Substituir as configurações de ToolsVersion
O atributo ToolsVersion
no elemento Project nos arquivos de projeto do Visual Studio e do MSBuild é considerado obsoleto no Visual Studio 2019 e posterior; você pode excluí-lo com segurança. Este artigo descreve seu uso em versões mais antigas do MSBuild ou para conjuntos de ferramentas personalizados. Confira Configurações padrão e personalizadas do Conjunto de ferramentas.
Você pode alterar o conjunto de ferramentas para projetos e soluções de uma destas três maneiras:
Usando a opção
-ToolsVersion
(ou-tv
, de forma abreviada) quando você compila o projeto ou solução por meio da linha de comando.Configurando o parâmetro
ToolsVersion
na tarefa MSBuild.Configurando a propriedade
$(ProjectToolsVersion)
em um projeto dentro de uma solução. Isso permite criar um projeto em uma solução com a versão do conjunto de ferramentas que difere daquela de outros projetos.
Substituir as configurações de ToolsVersion de projetos e soluções em builds da linha de comando
Embora os projetos do Visual Studio normalmente sejam compilados com o ToolsVersion especificado no arquivo de projeto, você pode usar a opção -ToolsVersion
(ou -tv
) na linha de comando para substituir esse valor e compilar todos os projetos e suas dependências de projeto para o projeto com um conjunto de ferramentas diferente. Por exemplo:
msbuild.exe someproj.proj -tv:12.0 -p:Configuration=Debug
Neste exemplo, todos os projetos são compilados usando ToolsVersion 12.0. (No entanto, consulte a seção Ordem de precedência posteriormente neste tópico).
Ao usar a opção -tv
na linha de comando, você pode usar a propriedade $(ProjectToolsVersion)
em projetos individuais para compilá-los com um valor de ToolsVersion diferente dos outros projetos na solução.
Substituir as configurações de ToolsVersion usando o parâmetro ToolsVersion da tarefa MSBuild
A tarefa do MSBuild é o principal meio para um projeto compilar outro. Para habilitar a tarefa do MSBuild para criar um projeto com um ToolsVersion diferente daquele especificado no projeto, ela fornece um parâmetro de tarefa opcional chamado ToolsVersion
. O exemplo a seguir demonstra como usar esse parâmetro:
Crie um arquivo chamado projectA.proj que contém o código a seguir:
<Project xmlns="http://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>
Crie outro arquivo chamado projectB.proj que contém o código a seguir:
<Project xmlns="http://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>
Em um prompt de comando, digite o seguinte comando:
msbuild projectA.proj -t:go -toolsversion:3.5
A saída a seguir aparece. Para
projectA
, a configuração-toolsversion:3.5
na linha de comando substitui a configuraçãoToolsVersion=12.0
na marcaProject
.ProjectB
é chamado por uma tarefa emprojectA
. Essa tarefa temToolsVersion=2.0
, que substitui as outras configuraçõesToolsVersion
paraprojectB
.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
Ordem de precedência
A ordem de precedência, em ordem decrescente, usada para determinar a ToolsVersion
é:
O atributo
ToolsVersion
na tarefa MSBuild usado para compilar o projeto, se houver.A opção
-toolsversion
(ou-tv
) que é usado no comando msbuild.exe, se houver.Se a variável de ambiente
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
estiver definida, use oToolsVersion
atual.Se a variável de ambiente
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
estiver definida e aToolsVersion
definida no arquivo de projeto for maior que aToolsVersion
atual, use aToolsVersion
atual.Se a variável de ambiente
MSBUILDLEGACYDEFAULTTOOLSVERSION
estiver definida ou seToolsVersion
não estiver definida, as etapas a seguir serão usadas:O atributo
ToolsVersion
do elemento Project do arquivo de projeto. Se esse atributo não existir, será considerado que se trata da versão atual.A versão padrão das ferramentas no arquivo MSBuild.exe.config.
A versão das ferramentas padrão no Registro. Para saber mais, confira Configurações padrão e personalizadas do Conjunto de Ferramentas.
Se a variável de ambiente
MSBUILDLEGACYDEFAULTTOOLSVERSION
não estiver definida, as etapas a seguir serão usadas:Se a variável de ambiente
MSBUILDDEFAULTTOOLSVERSION
estiver definida para umToolsVersion
que existe, use-a.Se
DefaultOverrideToolsVersion
estiver definida em MSBuild.exe.config, use-a.Se
DefaultOverrideToolsVersion
estiver definida no Registro, use-a.Caso contrário, use a
ToolsVersion
atual.