2013-03-19 7 views
5

Ich hatte mehrere Konfigurationen in meinem Bundle-Projekt in Visual Studio erstellt und ich möchte definieren, welche Code-Fragmente in jeder Konfiguration enthalten sein müssen. Mein Ziel ist es, mehrere Bootstrapper zu bekommen: einige von ihnen werden Voraussetzungen beinhalten und andere nicht. Ich habe versucht, so etwas wie:Wie man Bundle-Code mit Präprozessorvariablen verwaltet?

<PackageGroup 
     Id="Prerequisites"> 
     <?if $(Configuration)='Release'?> 
     <ExePackage 
     Id="Netfx4Client" 
     Cache="yes" 
     Compressed="yes" 
     PerMachine="yes" 
     Permanent="yes" 
     Vital="yes" 
     SourceFile=".\SupportFiles\dotNetFx40_Client_x86_x64.exe" 
     DetectCondition="NETFRAMEWORK40CLIENT OR (VersionNT64 AND NETFRAMEWORK40CLIENTX64)" 
     InstallCondition="(v4.0.30319 > NETFRAMEWORK40CLIENT OR NOT NETFRAMEWORK40CLIENT) OR (VersionNT64 AND v4.0.30319 > NETFRAMEWORK40CLIENTX64 OR NOT NETFRAMEWORK40CLIENTX64)" 
     InstallCommand="/q /norestart /log [TempFolder]\dotnetframework4.log"/> 
<?endif?> 

Aber natürlich ist es nicht richtig .. Ist es möglich, zu verwalten, welche Fragmente von Code in Kette von Paketen des Bundle enthalten sein, je nach jeder Variable? Vielen Dank.

Antwort

4

Ja, Sie müssen zuerst die MSBuild-Eigenschaft an den Präprozessor des Compilers übergeben. Verwenden Sie in Ihrer .wixproj die Eigenschaft DefineConstants, um die Eigenschaft zu tunneln. Der Standard .wixproj zur Verfügung gestellt von Votiv tut dies standardmäßig für Configuration aber für andere Eigenschaften würde es so aussehen:

<PropertyGroup> 
    <DefineConstants>$(DefineConstants);MyNewVariable=$(MSBuildPropertyName)</DefineConstants> 
</PropertyGroup> 

Nun, da die MSBuild Eigentum ist ein Präprozessor Variable Sie folgendes tun:

<?if $(var.Configuration)="Release" ?> 
    Stuff to conditionally compile out 
<?endif?> 

Grundsätzlich ist Ihr Beispiel oben korrekt, außer dass Sie den var. Teil des Präprozessor-Variablennamens vermissen. Weitere Details zu preprocessor syntax in the documentation.

+0

Vielen Dank, Herr Mensching! Das Problem war, dass ich bei der Erstellung neuer Konfigurationen keine Eigenschaften aus dem Standard kopiert hatte, der von Votive erstellt wurde. Jetzt funktioniert es super! – Nerielle

Verwandte Themen