【问题标题】:Conditional installation with Wix使用 Wix 进行有条件安装
【发布时间】:2011-03-02 00:24:35
【问题描述】:

是否可以有条件安装配置,从属于 Visual Studio 配置环境?

例如,选择 DEBUG 或 RELEASE 配置,Wix 在构建的安装中选择不同的可执行文件。

基本上,我将从相同的项目构建不同的安装,但它们的组件不同。一些组件是从同一个项目构建的,但使用不同的预处理器选项构建。

当然可以包含所有必需的组件,然后定义功能以便选择特定的组件进行安装,但我不想真正重新分发某些可执行文件。

构建不同的 Wix 项目是唯一的解决方案吗?

【问题讨论】:

    标签: deployment installation wix windows-installer


    【解决方案1】:

    将其他两个答案和卢卡的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?>
    

    【讨论】:

    • &lt;?else&gt; 应该是&lt;?else?&gt;
    • @BrainSlugs83 我收到“格式错误的预处理器变量 '$(Configuration)'。变量必须有前缀(如 'var.'、'env.' 或 'sys.')和一个至少 1 个字符长的名称。如果需要文字字符串“$(Configuration)”,请使用“$$(Configuration)”。有什么想法吗?
    • @user95227 仔细看,应该是$(var.Configuration) 而不是$(Configuration)
    • $(var.Configuration) 对 Wix 4.0 无效
    【解决方案2】:

    您的 wix 脚本可以访问构建参数,例如配置(“调试”或“发布”)。因此,您可以通过在组件声明中引用 $(var.Configuartion) 有条件地为当前配置包含正确的二进制文件:

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

    当您在发布模式下运行构建时,此脚本将获取二进制文件的发布版本。同样,在调试模式下,调试二进制文件将被拾取。这种方法不需要预处理 - 脚本在构建时做出与配置相关的决策。

    【讨论】:

    • 这对于查找路径非常有用——但是如果我想有条件地包含一些文件而不包含其他文件怎么办? (因此,提出的问题。)例如,在调试版本中,我可能希望包含 .pdb 文件,而不是在发布版本中包含它们(因为有时每个文件都像 20+ MB)。
    【解决方案3】:

    使用预处理器,例如:&lt;?if?&gt; 根据配置有条件地包含/排除组件。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    相关资源
    最近更新 更多