2012-03-07 11 views
24

Me preguntaba: ¿cuál es la diferencia entre usar msbuild y devenv al compilar soluciones desde la línea de comandos?MSBuild vs devenv para construcciones de línea de comandos

Una cosa obvia que se notó fue que msbuild crea proyectos dependientes que no están incluidos en la solución, mientras que devenv no.

¿Hay algún otro? ¿Hay algunas banderas especiales que se podrían pasar a msbuild para que coincidan exactamente con la estructura devenv?

P.S. Estoy usando Visual Studio 2010 SP1

+1

¡Después de todo, devenv llama a msbuild para realizar la compilación! –

Respuesta

9

De acuerdo con esta MSDN Blog Entry tratan de minimizar las diferencias, pero las que existen (es decir, utilizando un compilador de C# integrado en lugar de csc.exe o establecer la propiedad BuildingInsideVisualStudio) se realizan principalmente para optimizar el rendimiento de las compilaciones.

4

He experimentado un proyecto dentro de un equipo de varias capas: desarrolladores, probadores, implementadores. MSBuild era la herramienta principal de los implementadores: podían compilar y recompilar, simplemente estableciendo parámetros de construcción editando el archivo de configuración xml de MSBuild sin abrir el devenv. De hecho, a menudo usaban MSBuild en un entorno de preproducción donde no había nada de nada.

Nant es una herramienta similar de Apache Foundation.

Para más información echar un vistazo aquí:

20

La principal ventaja de MSBuild es que usted no necesita tener instalado Visual Studio.

Una limitación de MSBuild es que no soporta la construcción de proyectos de Visual Studio Setup (.vdproj).

(Puede solucionar esto mediante defining an exec task which calls devenv, pero aún necesita Visual Studio.)

4

Otra gran diferencia es que msbuild tiene algunas opciones que no existen para devenv. Por lo que yo puedo decir, no hay manera de aumentar la verbosidad de devenv pero se puede aumentar el nivel de detalle de msbuild por la opción:

/v:diag 
1

me encontré con un caso en el que devenv escribió un mensaje de error cuando un archivo de proyecto era falta, pero devolvió 0 de todos modos. Por el contrario, msbuild devolvió un valor distinto de cero. Cambié nuestro archivo MAKE a usar msbuild para no pasar por alto los errores.

Cuestiones relacionadas