2010-02-27 16 views
5

¿Hay alguna forma de usar las constantes de compilación en Build Events en Visual Studio - VB.NET? (Especialmente en los eventos posteriores a la generación)Usar constantes de compilación en eventos de compilación

Escenario

Si se define TEST_EDITION=TRUE Quiero correr un ejecutable durante el evento posterior a la generación así que si es FALSE continuación, voy a correr otra cosa.

Esto se puede utilizar para crear diferentes instaladores para diferentes ediciones.

P.S. Antes de que alguien sugiere: No, yo no quiero usar Nant, msbuild o algo por el estilo

+0

Me ayudaría si me explicaras más sobre lo que estás tratando de hacer. –

+0

Estoy tratando de escribir un evento de compilación condicional basado en la constante del compilador? ¿No estaba claro? -pero agregué un ejemplo para aclarar eso. –

Respuesta

11

Sí, la macro $ (DefineConstants) está disponible y puede probarse en un evento de compilación. Por ejemplo, el Proyecto + Compilar, Opciones de compilación avanzadas, las constantes de encargo = prueba se pueden probar de esta manera:

if /i "$(DefineConstants)" NEQ "TEST" goto skiptest 
echo Setting up for test environment 
:skiptest 

constantes personalizados más complicados como prueba = constantes true o compuestos necesitan ser analizada de manera diferente. Es cierto que rápidamente me rendí tratando de descubrir cómo usar el horrible FOR command.

+0

impresionante, gracias. –

0

No está seguro acerca de la sintaxis de Visual Basic, pero el siguiente truco puede ser utilizado por C++: el archivo de texto es el global_inc.bat:

SET PARAMETER=TRUE 

Esto podría ser ingresado por un script por lotes que fue llamado en el evento posterior a la construcción. El código C++ utiliza el archivo como sigue:

#define PARAMETER const int parameter 
#define SET /**/ 
#include "global_inc.bat" 
; 
#undef PARAMETER 

El paso postbuild veía así:

call global_inc.bat 
if "%PARAMETER%" == "TRUE" echo True 

Otra posibilidad sería que el paso prebuild a generar un archivo .vb, así como un archivo de configuración utilizado en el paso posterior a la construcción.

+0

Supongo que esta es su solución para esta limitación, porque realmente no necesito compilar nada. Todo lo que quiero hacer es ejecutar un ejecutable solo cuando una constante es VERDADERO durante el evento posterior a la construcción. –

+0

cambió el ejemplo para estar más cerca de la pregunta. la respuesta de nobugz me parece una solución mejor, sin embargo, – Vlad

0

¿Has probado el MsBuild PostEvents? Este es un extracto de un .csproj ... pero lo mismo se aplica a los archivos vbproj

<!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
     Other similar extension points exist, see Microsoft.Common.targets. 
    <Target Name="BeforeBuild"> 
    </Target> 
    <Target Name="AfterBuild"> 
    </Target> 
    --> 
    <Target Name="BeforeBuild"> 
    </Target> 
    <Target Name="AfterBuild"> 
    <Copy SourceFiles="$(OutputPath)$(AssemblyName).dll" DestinationFolder="$(BinariesFolder)" ContinueOnError="true" /> 
    </Target> 

Se puede utilizar con el objetivo TaskExec, lo que le permite ejecutar un archivo por lotes o un ejecutable.

<Target Name="DoSomething"> 
    <Exec Command="D:\DoSomething.exe"/> 
</Target> 
+0

No quiero usar msbuild porque no es adecuado para nuestra configuración actual del servidor de compilación. –

+0

Además, ni siquiera estoy seguro de si Msbuild lo admite. –

+0

Hay una ExecTask para MsBuild que le permite ejecutar un archivo por lotes o ejecutable ...He actualizado mi respuesta –

Cuestiones relacionadas