Invalidar la configuración de ToolsVersion
El atributo ToolsVersion
en el elemento Project de Visual Studio y los archivos de proyecto de MSBuild se considera obsoleto en Visual Studio 2019 y versiones posteriores; puede eliminarlo de forma segura. En este artículo se describe su uso en versiones anteriores de MSBuild o en conjuntos de herramientas personalizados. Vea Configuraciones de conjuntos de herramientas estándar y personalizados.
Puede cambiar el conjunto de herramientas para los proyectos y soluciones de tres maneras:
Con el modificador
-ToolsVersion
(o-tv
, para abreviar) cuando compile el proyecto o la solución desde la línea de comandos.Mediante el establecimiento del parámetro
ToolsVersion
en la tarea de MSBuild.Mediante el establecimiento de la propiedad
$(ProjectToolsVersion)
en un proyecto de una solución. Esto le permite compilar un proyecto en una solución con una versión del conjunto de herramientas que difiere de la de otros proyectos.
Invalidar la configuración de ToolsVersion de proyectos y soluciones en compilaciones de la línea de comandos
Aunque normalmente los proyectos de Visual Studio creados con ToolsVersion se especifican en el archivo del proyecto, puede usar el modificador -ToolsVersion
(o -tv
) en la línea de comandos para invalidar ese valor y compilar todos los proyectos y sus dependencias proyecto a proyecto con un conjunto de herramientas diferente. Por ejemplo:
msbuild.exe someproj.proj -tv:12.0 -p:Configuration=Debug
En este ejemplo, todos los proyectos se compilan con ToolsVersion 12.0. (En cambio, consulte la sección Orden de preferencia posteriormente en este tema).
Al usar el modificador -tv
en la línea de comandos, puede usar opcionalmente la propiedad $(ProjectToolsVersion)
en proyectos individuales para compilarlos con un valor de ToolsVersion diferente que el de los demás proyectos de la solución.
Invalidar la configuración de ToolsVersion con el parámetro ToolsVersion de la tarea de MSBuild
La tarea de MSBuild es el medio principal para que un proyecto compile otro. Para permitir que la tarea de MSBuild compile un proyecto con un ToolsVersion diferente que el especificado en el proyecto, proporciona un parámetro de tarea opcional denominado ToolsVersion
. En el siguiente ejemplo se muestra cómo se usa este parámetro:
Cree un archivo denominado projectA.proj y que contenga el siguiente código:
<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>
Cree otro archivo denominado projectB.proj y que contenga el siguiente código:
<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>
En un símbolo del sistema, escriba el siguiente comando:
msbuild projectA.proj -t:go -toolsversion:3.5
Aparece el siguiente resultado. Para
projectA
, la configuración de-toolsversion:3.5
en la línea de comandos invalida la configuración deToolsVersion=12.0
en la etiquetaProject
.Una tarea llama a
ProjectB
enprojectA
. Esa tarea tieneToolsVersion=2.0
, que invalida las otras configuraciones deToolsVersion
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
Orden de prioridad
El orden de prioridad, del más alto al más bajo, que se usa para determinar ToolsVersion
es:
El atributo
ToolsVersion
en la tarea de MSBuild que se usa para compilar el proyecto, si existe.El modificador
-toolsversion
(o-tv
) que se usa en el comando msbuild.exe, si existe.Si se establece la variable de entorno
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
, después use elToolsVersion
actual.Si se establece la variable de entorno
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
y elToolsVersion
definido en el archivo del proyecto es mayor que elToolsVersion
actual, use elToolsVersion
actual.Si se establece la variable de entorno
MSBUILDLEGACYDEFAULTTOOLSVERSION
, o siToolsVersion
no se establece, entonces se usan los pasos siguientes:El atributo
ToolsVersion
del elemento Project del archivo del proyecto. Si el atributo no existe, se presupone que es la versión actual.La versión de las herramientas predeterminada en el archivo MSBuild.exe.config.
La versión de las herramientas predeterminada en el registro. Para más información, consulte Configuraciones de conjuntos de herramientas estándar y personalizados.
Si no se establece la variable de entorno
MSBUILDLEGACYDEFAULTTOOLSVERSION
, entonces se usan los pasos siguientes:Si se establece la variable de entorno
MSBUILDDEFAULTTOOLSVERSION
en unToolsVersion
que existe, úselo.Si
DefaultOverrideToolsVersion
se establece en MSBuild.exe.config, úselo.Si
DefaultOverrideToolsVersion
se establece en el registro, úselo.De otro modo, use el
ToolsVersion
actual.