¿Cómo puedo obtener programáticamente la ruta a MSBuild desde una máquina donde se está ejecutando mi .exe?
Puedo obtener la versión .NET del entorno, pero ¿hay alguna forma de obtener la carpeta correcta para una versión .NET?
Buscando en el registro, parece que
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
puede ser lo que buscas; encienda regedit.exe y eche un vistazo.
reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" /v MSBuildToolsPath
dir HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\
También puede imprimir la ruta de MSBuild.exe a la línea de comando:
fuente
/reg:32
o/reg:64
en ambos bits decmd
(o cualquier proceso que esté ejecutando) para obtener explícitamente esa ruta.Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath
Si desea usar MSBuild para .Net 4, puede usar el siguiente comando de PowerShell para obtener la ruta del ejecutable. Si desea la versión 2.0 o 3.5, simplemente cambie la variable $ dotNetVersion.
Para ejecutar el ejecutable, deberá anteponer la variable $ msbuild con &. Eso ejecutará la variable.
fuente
$dotNetVersion
12.0 (vs 2013) y 14.0 (vs 2015) (si está instalado, por supuesto)HKLM:\software\Microsoft\MSBuild\ToolsVersions
clave. En su lugar, necesita obtener el directorio de instalación VS2017HKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7\15.0
, luego agregarMSBuild\15.0\Bin\MSBuild.exe
para obtener la ubicación de MSBuild EXE.Para las secuencias de comandos de shell de cmd en Windows 7, utilizo el siguiente fragmento en mi archivo por lotes para encontrar MSBuild.exe en .NET Framework versión 4. Supongo que la versión 4 está presente, pero no asumo la subversión. Esto no es totalmente de uso general, pero para scripts rápidos puede ser útil:
Para mis usos, salgo del archivo por lotes con un error si eso no funcionó:
fuente
set bb.build.msbuild.exe=
? ¿Es necesario o solo un artefacto de su configuración?Puede usar este comando PowerShell de prueba para obtener
MSBuildToolsPath
el registro.PowerShell (del registro)
Salida
o del sistema de archivos
PowerShell (del sistema de archivos)
Salida
fuente
Instrucciones para encontrar MSBuild :
&"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe
Instrucciones para encontrar VSTest :
&"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.VisualStudio.PackageGroup.TestTools.Core -find Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.VisualStudio.PackageGroup.TestTools.Core -find Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
(Tenga en cuenta que las instrucciones anteriores están ligeramente modificadas de las oficiales de Microsoft. En particular, he incluido el
-prerelease
indicador para permitir que se recojan las instalaciones de Vista previa y RC, y-products *
para detectar las instalaciones de Visual Studio Build Tools).Solo tomó más de dos años, pero finalmente en 2019, Microsoft nos escuchó y nos dio una forma de encontrar estos ejecutables vitales . Si tiene instalado Visual Studio 2017 y / o 2019,
vswhere
se puede consultar la utilidad para conocer la ubicación de MSBuild et al. Comovswhere
siempre se encuentra en%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
, ya no se requiere bootstrapping ni se requiere hardcoding de ruta.La magia es el
-find
parámetro, agregado en la versión 2.6.2 . Puede determinar la versión que ha instalado ejecutandovswhere
o comprobando sus propiedades de archivo. Si tiene una versión anterior, simplemente puede descargar la última y sobrescribir la existente%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
.vswhere.exe
es un ejecutable independiente, por lo que puede descargarlo y ejecutarlo desde cualquier lugar donde tenga una conexión a Internet. Eso significa que sus scripts de compilación pueden verificar si el entorno en el que se ejecutan está configurado correctamente, por nombrar una opción.fuente
msbuild
en la línea de comando (especialmente la línea de comando de Visual Studio si la usa), esa es la que se usará. Para ver lo que se utiliza si escribemsbuild
en la línea de comandos, haga lo siguiente:where msbuild
. Si eso no informa lo mismo que VSWHERE dice que lo último y lo mejor es, entonces debe hacer una ruta completa a lamsbuild.exe
que desea usar, o hacer ajustes a sus variables PATH para adaptarse.@AllenSanborn tiene una excelente versión de PowerShell, pero algunas personas tienen el requisito de usar solo scripts por lotes para las compilaciones.
Esta es una versión aplicada de lo que respondió @ bono8106.
msbuildpath.bat
build.bat
Para Visual Studio 2017 / MSBuild 15, Aziz Atif (el tipo que escribió Elmah ) escribió un script por lotes
https://github.com/linqpadless/LinqPadless/blob/master/build.cmd
fuente
Esto funciona para Visual Studio 2015 y 2017:
fuente
vswhere -products *
, como se especifica en github.com/Microsoft/vswhere/wiki/Find-MSBuild .Las ubicaciones del registro
Indique la ubicación del ejecutable.
Pero si necesita la ubicación donde guardar las extensiones de Tarea, está activada
fuente
la forma más fácil podría ser abrir PowerShell e ingresar
fuente
Una frase basada en la respuesta de @ dh_cgn :
(Resolve-Path ([io.path]::combine(${env:ProgramFiles(x86)}, 'Microsoft Visual Studio', '*', '*', 'MSBuild', '*' , 'bin' , 'msbuild.exe'))).Path
Selecciona todas las rutas existentes, por ejemplo, rutas.
C:\Program Files (x86)\Microsoft Visual Studio\*\*\MSBuild\*\bin\msbuild.exe
.Las estrellas comodines son:
Tenga en cuenta que este comando está seleccionando la primera ruta que coincide con la expresión ordenada por alfabeto. Para reducirlo, simplemente reemplace los comodines con elementos específicos, por ejemplo. El año o la versión de herramientas.
fuente
En Windows 2003 y versiones posteriores, escriba este comando en cmd:
Si no aparece nada, significa que .NET Framework no está incluido en la RUTA del sistema. MSBuild debe estar en la carpeta de instalación de .NET, junto con los compiladores de .NET (vbc.exe, csc.exe)
fuente
A partir de MSBuild 2017 (v15), MSBuild ahora está instalado en una carpeta en cada versión de Visual Studio
Estos son algunos ejemplos de dónde se encuentra MSBuild.exe en mi máquina:
fuente
Para recuperar la ruta de msbuild 15 (Visual Studio 2017) con lote del registro sin herramientas adicionales:
Mejores herramientas disponibles:
fuente
No pensaría que hay mucho que agregar aquí, pero tal vez es hora de una forma unificada de hacerlo en todas las versiones. Combiné el enfoque de consulta del registro (VS2015 y posteriores) con el uso de vswhere (VS2017 y posteriores) para llegar a esto:
fuente
Hay muchas respuestas correctas. Sin embargo, aquí utilizo One-Liner en PowerShell para determinar la ruta de MSBuild para la versión más reciente :
fuente
-last 1
(en lugar de-first 1
para obtener la última versión) y también concatena el nombre del archivo (para obtener correctamente la ruta completa y no solo la carpeta).Este método de PowerShell obtiene la ruta a msBuild desde múltiples fuentes. Intentando en orden:
Primero usando vswhere (porque Visual Studio parece tener versiones más actualizadas de msBuild) ej.
Si no se encuentra probando el registro (versión de marco), por ejemplo
Código Powershell:
fuente
Para Visual Studio 2017 sin conocer la edición exacta, puede usar esto en un script por lotes:
El comando findtr es ignorar ciertos ejecutables de msbuild (en este ejemplo, el amd64).
fuente
agregar rama de vswhere para https://github.com/linqpadless/LinqPadless/blob/master/build.cmd , funciona bien en mi computadora, y la rama de vswhere funciona en la computadora de mi compañero. Puede ser, la rama vswhere debería avanzar como la primera comprobación.
fuente
Si eres aventurero, también puedes obtener el código fuente y la última versión de MsBuild de GitHub ahora en https://github.com/Microsoft/msbuild/releases/
fuente
Obtenga la última versión de MsBuild. La mejor manera, para todos los tipos de instalación de msbuild, para diferentes arquitecturas de procesador (Power Shell):
fuente
Si desea compilar un proyecto de Delphi, mire "ERROR MSB4040 No hay objetivo en el proyecto" cuando use msbuild + Delphi2009
La respuesta correcta se dice: "Hay un archivo por lotes llamado rsvars.bat (búsquelo en la carpeta RAD Studio). Llame a eso antes de llamar a MSBuild, y configurará las variables de entorno necesarias. Asegúrese de que las carpetas sean correctas en rsvars .bat si tiene el compilador en una ubicación diferente a la predeterminada ".
Este bate no solo actualizará la variable de entorno PATH a la carpeta .NET adecuada con la versión adecuada de MSBuild.exe, sino que también registrará otras variables necesarias.
fuente