2013-03-19 116 views
5

我在Visual Studio的bundle-project上創建了幾個配置,我想定義哪些代碼片段必須包含在每個配置中。我的目標是獲得幾個bootstrappers:其中一些將包含先決條件,一些則不會。我想是這樣的:如何使用預處理器變量管理Bundle的代碼?

<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?> 

但是,當然,這是不正確的..是否有可能來管理其中的代碼片段將被納入依賴任何變量的捆綁包鏈?謝謝。

回答

4

是的,你首先需要將MSBuild屬性傳遞給編譯器的預處理器。在您的.wixproj中使用DefineConstants屬性來通過屬性。通過還願提供的默認.wixproj做到這一點通過默認Configuration但對其他性能它會是這樣的:

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

既然MSBuild的屬性是一個預處理器變量,你可以做到以下幾點:

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

基本上,上面的示例是正確的,只是缺少預處理器變量名稱的var.部分。有關preprocessor syntax in the documentation的更多詳細信息。

+0

非常感謝Mr.Mensching!問題是,在創建新配置的過程中,我沒有複製由Votive創建的默認屬性。現在它工作得很好! – Nerielle 2013-03-22 06:38:31