msbuild - tools - visual studio installer
¿Cómo llamo a la versión de Visual Studio 2017 RC de MSBuild desde un archivo BAT? (8)
La forma admitida
El motor de configuración de VS2017 tiene una API de interoperabilidad que le permite consultar información sobre qué instancia (s) de VS2017 están instaladas. Hay un paquete NuGet para él, e incluso una muestra de cómo consultar, incluida la ruta de instalación. Para el consumo en un archivo por lotes o PS, puede reescribir la aplicación de muestra y llamarla desde su secuencia de comandos para generar la información que necesita.
La manera no soportada
El motor de configuración de VS mantiene un almacén de sus datos en %ProgramData%/Microsoft/VisualStudio/Packages/_Instances
. Habrá una carpeta para cada instancia de VS2017, y dentro de esa carpeta hay un archivo state.json
que contiene información sobre esa instalación, incluida la ruta de instalación.
Como necesita extraer la información del archivo .json, tiene la opción de escribir una aplicación a la que llama desde su archivo de script, o bien obtener una lógica de análisis directamente en el script. Esto obviamente será frágil ya que el esquema JSON o la ubicación del archivo pueden cambiar.
El método de la fuerza bruta
Suponiendo que está utilizando la ruta de instalación predeterminada, puede buscar recursivamente msbuild.exe en %ProgramFiles(x86)%/Microsoft Visual Studio/
(parece que habrá msbuild.exe de 32 bits y 64 bits para cada VS ejemplo). Probablemente sea más fácil hacerlo dentro de su archivo de script, pero depende de la ruta de instalación predeterminada (o de cualquier ruta codificada con la que desee buscar).
Cambie los requisitos de su entorno de desarrollo
Lo último que podría hacer es exigir que los desarrolladores utilicen (o de alguna manera invoquen) el vsdevcmd.bat
para usar el entorno de desarrollo de VS. Esto les proporcionará MSBuild y, además, cualquier otra herramienta del entorno VS, en su% PATH%. Esto impone un requisito a su equipo de desarrollo, pero siempre será una forma oficialmente compatible para encontrar msbuild.exe.
Las versiones anteriores de MSBuild se pueden encontrar aquí: %programfiles(x86)%/msbuild/<version>/bin/msbuild.exe.
Pero para Visual Studio 2017RC, la ruta es %programfiles(x86)%/Microsoft Visual Studio/2017/Enterprise/MSBuild/15.0/Bin/msbuild.exe
. El tipo de instalación: enteprise, community o professional, parece ser parte del camino. Y eso hace que sea difícil especificar la ruta correcta a msbuild en un archivo BAT que debería funcionar en muchas computadoras diferentes con diferentes versiones de Visual Studio 2017.
¿Cuál es la mejor manera de llamar a la versión de Msbuild de Visual Studio 2017 RC desde un archivo bat? ¿O de PowerShell?
Ahora que se lanzó VS 2017, pensé que sería útil agregar 2 centavos:
Creando un archivo por lotes:
Abra el Bloc de notas
Copie lo siguiente y péguelo en el bloc de notas, reemplazando la solución que desea construir con [Nombre de mi solución aquí]:
@echo off
:variables
SET msBuildLocation="C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/msbuild.exe"
SET solutionDirectory=[My Solution Location Here]
SET batchFileLocation=[BatchFileLocation Here]
cd %solutionDirectory%
echo Building MS files for [My Solution Name Here].
call %msBuildLocation% [My Solution Name].sln /p:Configuration=Debug /m:4 /v:M /fl /flp:LogFile=msbuild.log;Verbosity=Normal /nr:false /consoleloggerparameters:Summary;ShowTimestamp;ShowEventId;PerformanceSummary
echo -
echo --------Done building [My solution name here].--------------
echo -
cd %batchFileLocation%
Guarde su archivo por lotes como lo desee con la extensión .bat. Asegúrese de seleccionar todos los archivos en lugar de .txt o de lo contrario no funcionará. Llame al archivo por lotes al emitir el comando cd donde lo tiene guardado, y debería funcionar. O simplemente haga doble clic. Hecho.
Tenga en cuenta que mi versión de Visual Studio es comunidad; necesitarás reemplazar la ruta con la versión apropiada.
La forma más simple ...
- Instalar las herramientas de compilación https://www.visualstudio.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15
- Lucro; las herramientas de compilación se instalarán en una ubicación separada, que es estándar en cualquier lugar donde lo instale, independientemente de su VS SKU (profesional / empresa / comunidad, todas se instalan en diferentes rutas)
- Nueva ubicación
C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/MSBuild/15.0/Bin/msbuild.exe
Microsoft ha creado una herramienta para encontrar la ubicación de Visual Studio 2017 y la más nueva https://github.com/Microsoft/vswhere
Esa opción y más reciente están descritas en this publicación de blog.
Publicando esto para las personas que todavía intentan localizar la versión más nueva de msbuild en una máquina y recurren a una versión más antigua si es que está disponible. Creo que este fragmento de powershell es el truco, que se puede invocar fácilmente desde un archivo bat .
Function Find-MsBuild([int] $MaxVersion = 2017)
{
$agentPath = "$Env:programfiles (x86)/Microsoft Visual Studio/2017/BuildTools/MSBuild/15.0/Bin/msbuild.exe"
$devPath = "$Env:programfiles (x86)/Microsoft Visual Studio/2017/Enterprise/MSBuild/15.0/Bin/msbuild.exe"
$proPath = "$Env:programfiles (x86)/Microsoft Visual Studio/2017/Professional/MSBuild/15.0/Bin/msbuild.exe"
$communityPath = "$Env:programfiles (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/msbuild.exe"
$fallback2015Path = "${Env:ProgramFiles(x86)}/MSBuild/14.0/Bin/MSBuild.exe"
$fallback2013Path = "${Env:ProgramFiles(x86)}/MSBuild/12.0/Bin/MSBuild.exe"
$fallbackPath = "C:/Windows/Microsoft.NET/Framework/v4.0.30319"
If ((2017 -le $MaxVersion) -And (Test-Path $agentPath)) { return $agentPath }
If ((2017 -le $MaxVersion) -And (Test-Path $devPath)) { return $devPath }
If ((2017 -le $MaxVersion) -And (Test-Path $proPath)) { return $proPath }
If ((2017 -le $MaxVersion) -And (Test-Path $communityPath)) { return $communityPath }
If ((2015 -le $MaxVersion) -And (Test-Path $fallback2015Path)) { return $fallback2015Path }
If ((2013 -le $MaxVersion) -And (Test-Path $fallback2013Path)) { return $fallback2013Path }
If (Test-Path $fallbackPath) { return $fallbackPath }
throw "Yikes - Unable to find msbuild"
}
$msbuildPath = Find-MsBuild 2017
SO tengo la edición comunitaria 2017, para mí la ruta es: C: / Archivos de programa (x86) / Microsoft Visual Studio / 2017 / Community / MSBuild / 15.0 / Bin /
Otras soluciones en este hilo me arrojaron una excepción.
Si ha instalado la vista previa 3 o posterior de las herramientas .NET Core, la CLI de dotnet
debería estar disponible en %PATH%
de forma predeterminada (incluso si no está dotnet msbuild
un proyecto .NET Core), por lo que podría probar dotnet msbuild
. Ref https://github.com/dotnet/docs/blob/master/docs/core/preview3/tools/dotnet-msbuild.md
También ejecuto las herramientas de compilación desde un archivo bat en mi servidor CI: la nueva ubicación que he encontrado es la siguiente:
% programfiles (x86)% / Microsoft Visual Studio / 2017 / BuildTools / MSBuild / 15.0 / Bin / msbuild.exe