2010-06-10 111 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

相关问题