2010-02-27 7 views
5

Esiste comunque un modo per utilizzare le costanti del compilatore in Eventi di compilazione in Visual Studio - VB.NET? (Soprattutto negli eventi post-generazione)Utilizzo delle costanti del compilatore negli eventi di build

Scenario

Se TEST_EDITION=TRUE è definito voglio eseguire un file eseguibile durante l'evento di post-generazione quindi se è FALSE poi corro qualcos'altro.

Questo può essere utilizzato per creare diversi programmi di installazione per diverse edizioni.

P.S. Prima che qualcuno suggerisce: No io non voglio usare Nant, msbuild o qualcosa del genere

+0

Sarebbe di grande aiuto se spiegassi di più su cosa stai cercando di fare. –

+0

Sto provando a scrivere un evento build condizionale basato sulla costante del compilatore? Non era chiaro? -ma ho aggiunto un esempio per chiarirlo. –

risposta

11

Sì, la macro $ (DefineConstants) è disponibile e può essere verificata in un evento di build. Ad esempio, Progetto + compilazione, avanzate opzioni di compilazione, le costanti personalizzate = Test possono essere testati in questo modo:

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

più complesse costanti personalizzate come prova = costanti TRUE o composti devono essere letti in modo diverso. Certo, ho subito rinunciato a cercare di capire come usare l'orrido FOR command.

+0

impressionante, grazie. –

0

Non sono sicuro sulla sintassi di Visual Basic, ma il seguente trucco può essere utilizzato da C++: il file global_inc.bat legge come:

SET PARAMETER=TRUE 

Questo potrebbe essere inserito da uno script batch chiamato nell'evento post-build. Il codice C++ utilizzato il file come segue:

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

Il passo postbuild si presentava così:

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

Un'altra possibilità sarebbe per il passo prebuild a generare un file .vb, così come un file di configurazione usato nel passaggio post-build.

+0

Presumo che questo sia un modo per ovviare a questa limitazione, perché non ho davvero bisogno di compilare nulla. Tutto ciò che voglio fare è eseguire un eseguibile solo quando una costante è TRUE durante l'evento post-build. –

+0

ha cambiato l'esempio per essere più vicino alla domanda. la risposta di nobugz mi sembra una soluzione migliore comunque – Vlad

0

Hai provato MsBuild PostEvents? Questo è un estratto di un csproj ... ma lo stesso vale per i file 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> 

Si può usare con l'obiettivo TaskExec, che consente di eseguire un file batch o un eseguibile.

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

Non voglio usare msbuild perché non è adatto per la nostra attuale configurazione del server di build. –

+0

Inoltre, non sono nemmeno sicuro se Msbuild lo supporta. –

+0

Esiste un ExecTask per MsBuild che consente di eseguire un file batch o eseguibile ...Ho aggiornato la mia risposta –