¿Cómo compilo un proyecto de Visual Studio desde la línea de comandos?

112

Estoy programando el ciclo de verificación, compilación, distribución, prueba y confirmación para una gran solución C ++ que utiliza Monotone , CMake , Visual Studio Express 2008 y pruebas personalizadas.

Todas las demás partes parecen bastante sencillas, pero no veo cómo compilar la solución de Visual Studio sin obtener la GUI.

El script está escrito en Python, pero una respuesta que me permitiera simplemente hacer una llamada a: os.system sería suficiente.

John Mulder
fuente

Respuestas:

116

Conozco dos formas de hacerlo.

Método 1
El primer método (que prefiero) es usar msbuild :

msbuild project.sln /Flags...

Método 2
También puede ejecutar:

vcexpress project.sln /build /Flags...

La opción vcexpress regresa inmediatamente y no imprime ningún resultado. Supongo que eso podría ser lo que quieres para un guión.

Tenga en cuenta que DevEnv no se distribuye con Visual Studio Express 2008 (pasé mucho tiempo tratando de averiguarlo cuando tuve un problema similar por primera vez).

Entonces, el resultado final podría ser:

os.system("msbuild project.sln /p:Configuration=Debug")

También querrá asegurarse de que sus variables de entorno sean correctas, ya que msbuild y vcexpress no están de forma predeterminada en la ruta del sistema. Inicie el entorno de compilación de Visual Studio y ejecute su script desde allí, o modifique las rutas en Python (con os.putenv ).

Moisés Schwartz
fuente
Esto también se aplica a Visual Studio 2010 Express.
Samuel Harmer
msbuild no parece estar disponible con VS 2008
Lucky Luke
46

MSBuild suele funcionar, pero me he encontrado con dificultades antes. Puede que tengas mejor suerte con

devenv YourSolution.sln /Build 
Jeffrey Hantin
fuente
MSBuild no funciona con proyectos de Visual Fortran (* .vfproc). Gracias por señalarme a Devenv, que lo hace.
Maik Beckmann
Tengo que usar: devenv YourSolution.sln / Build pero funcionó muy bien gracias.
bobwah
7
También puede especificar la configuración:devenv YourSolution.sln /Build Debug
Josh Stribling
Funciona genial. También se puede reconstruir usando el siguiente comandodevenv YourSolution.sln /rebuild
Abhineet
1
También se puede reconstruir para el modo de liberación o depuración simplemente agregando depuración o liberación después de un espacio. Por ejemplo: devenv YourSolution.sln /rebuild releaseodevenv YourSolution.sln /rebuild debug
Abhineet
20

Para ser honesto, tengo que agregar mis 2 centavos.

Puede hacerlo con msbuild.exe . Hay muchas versiones de msbuild.exe .

C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework64 \ v3.5 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe
C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework \ v3.5 \ msbuild.exe C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe

Utilice la versión que necesita. Básicamente tienes que usar el último.

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe

Así que cómo se hace.

  1. Ejecute la ventana COMMAND

  2. Ingrese la ruta a msbuild.exe

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe

  1. Ingrese la ruta a la solución del proyecto como

"C: \ Users \ Clark.Kent \ Documents \ visual studio 2012 \ Projects \ WpfApplication1 \ WpfApplication1.sln"

  1. Agregue los indicadores que necesite después de la ruta de la solución.

  2. Presione ENTER

Tenga en cuenta que puede obtener ayuda sobre todos los indicadores posibles, como

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ msbuild.exe / help

Desarrollador
fuente
6
Me gusta mucho la forma en que haya añadido los detalles para los nuevos desarrolladores como dónde encontrar msbuild etc.
Ayushmati
8

Usar msbuildcomo lo señalaron otros funcionó para mí, pero necesitaba hacer un poco más que eso. En primer lugar, msbuildnecesita tener acceso al compilador. Esto se puede hacer ejecutando:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"

Entonces msbuildno estaba en mi $ PATH, así que tuve que ejecutarlo a través de su ruta explícita:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" myproj.sln

Por último, mi proyecto estaba haciendo uso de algunas variables como $(VisualStudioDir). Parece que esos no se configuran, msbuildasí que tuve que configurarlos manualmente a través de la /propertyopción:

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" /property:VisualStudioDir="C:\Users\Administrator\Documents\Visual Studio 2013" myproj.sln

Esa línea finalmente me permitió compilar mi proyecto.

Bonificación : parece que las herramientas de línea de comandos no requieren un registro después de 30 días de usarlas como lo hace la edición de la comunidad de Visual Studio basada en GUI "gratuita". Con el requisito de registro de Microsoft vigente, esa versión difícilmente es gratuita. Gratis como en facebook si acaso ...

Josch
fuente
4

MSBuild es tu amigo.

msbuild "C:\path to solution\project.sln"
Adam Davis
fuente
1
He visto que fallan en situaciones extrañas debido a diferencias en cómo MSBuild y DevEnv procesan los archivos .sln.
Jeffrey Hantin
3

DEVENV funciona bien en muchos casos, pero en un WIXPROJ para construir mi instalador WIX, todo lo que obtuve es el error "CATASTROPHIC" en el registro de salida.

Esto funciona: MSBUILD /Path/PROJECT.WIXPROJ / t: Build / p: Configuration = Release

peter.cyc
fuente