2010-06-10 141 views
8

是否有可能具有條件安裝配置,從屬於Visual Studio配置環境?使用Wix進行有條件安裝

例如,選擇DEBUG或RELEASE配置,Wix在構建的安裝中選擇不同的可執行文件。

基本上我會從同一個項目中構建不同的安裝,但是它們會因組件而不同。某些組件是從同一個項目構建的,但是使用不同的預處理器選項進行構建。

當然,可以包含每個必需組件,然後定義功能以便爲安裝選擇特定組件,但我不想真正重新分配某些可執行文件。

構建不同的Wix項目是唯一的解決方案?

回答

6

使用預處理器,例如:<?if?>根據配置有條件地包含/排除組件。

+0

我還沒有想到威克斯可以進行預處理!我找到了這個人http://wix.sourceforge.net/manual-wix2/preprocessor.htm – Luca 2010-06-10 18:09:32

8

您的wix腳本可以訪問構建參數,如Configuration('debug'或'release')。因此,您可以有條件地包括當前配置正確的二進制文件在你的組件聲明引用$(var.Configuartion):

<Component Id="myProject.dll" 
       DiskId="1" 
       Guid="*"> 
    <File Id="myProject.dll" 
      Name="myProject.dll" 
      Source="..\myProject\bin\$(var.Configuration)\myProject.dll" /> 
</Component> 

當運行在發佈模式構建,該腳本將拿起的發行版二進制。同樣,在調試模式下,調試二進制文件將被拾取。這種方法不需要預處理 - 腳本在構建時進行與配置相關的決策。

+1

這對尋找路徑很好 - 但是如果我想*有條件地*包括一些文件而不是其他人? (因此,被問到的問題。)例如,對於一個調試版本,我可能希望包含.pdb文件,而不是將它們包含在發佈版本中(因爲這些文件有時每個文件有20+ MB)。 – BrainSlugs83 2013-06-11 01:56:14

9

把其他兩個答案和Luca的research放在一起我想出了這個解決方案,這似乎工作(請注意,字符串比較似乎區分大小寫,缺乏引號似乎是正確的,我測試過這與WiX 3.7):

<?if $(var.Configuration) = Debug ?> 
    <!-- DEBUG ONLY --> 

    [ ... insert debug only XML here ... ] 

    <!-- END DEBUG ONLY --> 
<?else?> 
    <!-- RELEASE ONLY --> 

    [ ... insert release only XML here ... ] 

    <!-- END RELEASE ONLY --> 
<?endif?> 
+2

''應該是'' @ – Bishoy 2016-04-21 04:21:33

+0

BrainSlugs83我越來越「病態的預處理器變量 '$(配置)'。變量必須有一個前綴(如 '變種', '信封',還是「SYS。 「)和一個名字至少1個字符長。如果文字字符串‘$(配置)’需要,使用‘$$(配置)’。任何想法? – user95227 2016-11-21 21:41:16

+0

@ user95227定睛一看,它應該是'$( var.Configuration)'不'$(配置)'。 – BrainSlugs83 2017-02-04 19:57:53

相關問題