visual studio multi extensions code visual-studio-2008 msbuild prebuild

visual-studio-2008 - multi - visual studio code



¿Múltiples eventos previos a la construcción en Visual Studio? (3)

He seguido una publicación de blog de Scott Hanselman para administrar la configuración con PreBuild Events y hacer que funcione bien.

Ahora quiero dividir mi configuración en un par de archivos diferentes, por lo que debo ejecutar el comando nuevamente antes de la compilación. El problema es que el texto del evento de PreBuild todo se ejecuta como un comando de consola. ¿Cómo puedo dividirlo en varios comandos?


Debería poder colocar los comandos en una línea separada, y luego cada comando se ejecutará en secuencia. Alternativamente, una forma "tramposa" de hacer lo mismo es la siguiente:

  • Cree un segundo archivo por lotes que ejecute la parte deseada de la nueva funcionalidad, luego cree un lote principal que ejecute los dos archivos por lotes de componentes y ejecute ese nuevo lote en su evento de precompilación. Por ejemplo: batch1.bat modifica el archivo 1, batch2.bat modifica el archivo 2 y luego batch3.bat ejecuta batch1.bat y batch2.bat

Estoy usando Visual Studio 2010 en Windows 7 de 64 bits.

Encontré una solución que es mejor para mi gusto, estoy encadenando comandos junto con && ^ , por ejemplo, editando mi archivo .vcxproj xml así:

<PreBuildEvent> <Command>echo "hello 1" &amp;&amp; ^ echo "hello 2" &amp;&amp; ^ echo "hello 3"</Command> <Message>Performaing pre-build actions ...</Message> </PreBuildEvent>

He encadenado tres comandos juntos. El ''&&'' le dice al shell que deje de ejecutar si el comando anterior falla.

Tenga en cuenta que en el archivo .xml, no se puede usar && directamente, por lo que ''& amp; & amp;'' debe ser utilizado en su lugar. También tenga en cuenta el uso del carácter ^ , este es el carácter de continuación de línea del shell cmd (como BASH''s / char).

Cada nuevo comando debe comenzar al principio de la línea. Usando este enfoque, uno puede encadenar tantos comandos como quiera, pero si falla alguno, el resto de la cadena no se ejecutará.

Aquí está mi caso de uso real, estoy realizando algunas comprobaciones de entorno con un script de Python, seguido de copiar el archivo de depuración de mi encabezado precompilado al directorio de otro subproyecto:

<PreBuildEvent> <Command>C:/Python27/python.exe "$(SolutionDir)check_path.py" 32 &amp;&amp; ^ copy "$(SolutionDir)h1ksim_lib/vc$(PlatformToolsetVersion).pdb" "$(IntDir)" /-Y > nul</Command> <Message>Performaing pre-build actions ...</Message> </PreBuildEvent>

El uso de > nul en el comando de copia evita que se muestre cualquier salida en la ventana de compilación, por lo que mis compañeros de equipo no se asustarán cuando diga 0 file(s) copied.

La referencia para compartir encabezados precompilados entre subproyectos está aquí:

Compartir encabezados precompilados entre proyectos en Visual Studio


Resulta que el problema es que el ejemplo de Scott no incluye el comando de call al comienzo de la línea. Esto está bien siempre y cuando no desee ejecutar el archivo .bat varias veces con diferentes parámetros.

Esta:

call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)connectionStrings.config.$(ConfigurationName)" "$(ProjectDir)connectionStrings.config" call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)appSettings.config.$(ConfigurationName)" "$(ProjectDir)appSettings.config"

funcionó bien para mí