visual studio realizo que los han generarse generar error diseƱador confirmado compila codigo code cambios actualiza visual-studio-2013 msbuild pre-build-event

visual-studio-2013 - realizo - visual studio no actualiza los cambios



Visual Studio agrega un evento previo a la compilaciĆ³n que siempre se ejecuta(proyecto C#) (3)

En mi proyecto, estoy ejecutando una herramienta externa para actualizar algunos archivos binarios. Estos archivos se incluyen en el proyecto como "contenido".

En el momento en que la herramienta está configurada para ejecutarse durante el "evento de construcción previa" en las propiedades del proyecto C #. Desafortunadamente, este evento solo se ejecuta si el proyecto no está actualizado, que no es lo que necesito.

Estoy trabajando alrededor de esto usando "reconstruir" en lugar de "construir" en mi proyecto, pero esto es tedioso y lento.

Necesito ejecutar esta herramienta siempre, independientemente de si un proyecto está actualizado o no. En realidad, incluso antes de que MSBuild determine si el proyecto está actualizado, ya que la herramienta modifica algunos de los archivos incluidos en el proyecto, lo que afecta el resultado de la verificación actualizada.

¿Hay una manera adecuada de hacerlo?


Aquí está la solución. Defina esta propiedad en su archivo de proyecto:

<PropertyGroup> <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck> </PropertyGroup>

PreBuildStep se ejecutará cada vez, independientemente de si el proyecto está actualizado o no.

Parece que Visual Studio está pasando por alto los controles actualizados de MSBuild y está usando un tipo de control personalizado que es más rápido, pero tiene el efecto secundario de romper objetivos de compilación personalizados.


En el nivel de proyecto, tienes tres opciones:

1) Acción previa a la construcción

<PropertyGroup> <PreBuildEvent>notepad.exe Foo.txt</PreBuildEvent> </PropertyGroup>

2) objetivo de BeforeBuild normal

<Target Name="BeforeBuild"> <Exec Command="notepad.exe Foo.txt" /> </Target>

3) "adjunto" al objetivo "Construir" (como se sugiere stijn)

<Target Name="BeforeBuild2" BeforeTargets="Build"> <Exec Command="notepad.exe Foo.txt" /> </Target>

En realidad, esta solución (en caso de compilación) no funcionará, ya que DependsOnTargets se ejecuta ANTES de los objetivos previos . Y exactamente en DependsOnTargets lo real (CoreBuild) se asienta :) Por eso inventaron el objetivo ''BeforeBuild'';)


En ambos casos, VS verifica si hay cambios (los archivos están actualizados). ¿Por qué incluso quieres ejecutar un programa externo si no se ha cambiado nada? Si este programa funciona en un archivo (por ejemplo, "contenido"), msbuild y VS deberían detectar archivos como obsoletos y en proceso de creación.

Desafortunadamente, IDE (Visual Studio) tiene su propio método para lidiar con proyectos de msbuild. El mecanismo principal es el mismo, pero cuando se trata de determinar qué compilación del proyecto o no, o en qué orden ... VS actúa totalmente diferente.

Puede usar una herramienta externa y ejecutar "msbuild" contra su solución o proyecto. Esto también compilará "la forma correcta" y los binarios no serán diferentes, pero tendrá todas las capacidades y potenciales de MsBuild


Ninguna de estas soluciones me funcionó con Visual Studio para Mac. Quiero ejecutar un script de bash antes de compilar el proyecto, pero como estoy usando Xamarin, algunas cosas se están saliendo de control. Probé todos los diferentes tipos de objetivos e incluso probé los CustomCommands en las opciones del proyecto, pero aún así obtendría problemas con MSbuild simplemente ejecutándose automáticamente o no ejecutándose realmente antes de la compilación

Puede ejecutar los eventos de PreBuild en un proyecto separado que se compila antes de su proyecto principal.

  1. Cree un nuevo proyecto y asígnele el nombre "PreBuildEvent"
  2. Agregue sus objetivos / comandos de MSbuild como se muestra arriba a este nuevo archivo PreBuildEvent.csproj para cada grupo de propiedades / configuración de compilación
  3. En el proyecto donde originalmente realizó el trabajo de PreBuild, agregue una referencia a este nuevo proyecto.
  4. Este nuevo proyecto se construirá primero, ejecutando cualquier evento de PreBuild, y una vez que se construya este proyecto, se iniciará la compilación para su proyecto original. Esto se debe a que cuando agrega una referencia a un proyecto, Visual Studio se asegura de construirlos en el orden correcto