2011-03-15 14 views
8

He escrito un archivo por lotes, que cuando se ejecuta crea una solución de estudio visual. La solución se compone de pocos proyectos de C#. Estoy usando la utilidad MSBuild para esto. ¿Cómo puedo evitar que la compilación siga avanzando cuando hay errores de compilación en cualquiera de los proyectos? Además, ¿cómo puedo obtener los mensajes de error y mostrarlos en el símbolo del sistema?Detener el procesamiento de MSBuild inmediatamente en los errores de compilación

+0

Dupe: http://stackoverflow.com/questions/3297194/stop-msbuild-process-if-a-target-fails –

+1

@RitchMelton no es una tontería ya que se trata de detenerse en el primer fracaso de una solución. –

Respuesta

5

No hay soporte para la parada en primer fracaso en la construcción de una solución de Visual Studio.

Puede solucionar esto mediante la adopción de las siguientes medidas:

  1. establecer el entorno msbuildemitsolution variable para 1 (set msbuildemitsolution=1);
  2. Invoque MSBuild para generar un archivo * .proj a partir de la solución VS de destino;
  3. En el archivo * .sln.proj generado, cambie RunEachTargetSeparately="true" en el destino denominado Build a RunEachTargetSeparately="false";
  4. Invoque MSBuild para compilar el archivo * .sln.proj actualizado.

Esta respuesta se basa en Dan Moseley answer to a post on MSDN Forums.

+0

Lo he intentado con msbuild en .NET 4.0. No funciona, no se crea ningún archivo .proj, supervisé la acvitity de msbuild por procmon y también compruebo el archivo de disco. – zhaorufei

+0

Esto aún es compatible con .NET 4.0; Asegúrese de que no haya abierto la ventana del símbolo del sistema al configurar la variable de entorno a través de la configuración del sistema; si ese es el caso, abra una nueva ventana del símbolo del sistema. –

4

Sería más fácil darle una respuesta si hubiera publicado partes relevantes de su archivo por lotes. Sin embargo, para la segunda parte de la pregunta, aquí es un ejemplo de cómo he resuelto casi la misma cuestión en uno de nuestros scripts de construcción:

msbuild.exe /m /p:Configuration=Release /v:n theSolutionFile.sln >Build.log 
if ERRORLEVEL 1 goto :showerror 
find "0 Warn" Build.log >nul: 
if ERRORLEVEL 1 goto :showerror 

goto :EOF 

:showerror 
echo Build error occurred 
exit %ERRORLEVEL% 
Cuestiones relacionadas