【问题标题】:Dealing with orphaned components while linking wixlib在链接 wixlib 时处理孤立组件
【发布时间】:2015-04-08 09:10:41
【问题描述】:

我的任务是基于第 3 方提供的相同 wixlib 构建 2 个安装程序。完整安装程序包括所有组件,精简版仅包含核心内容。我假设 wixlib 具有以下结构:

<Fragment>
  <ComponentGroup Id="CoreStuff">
    <!-- List of components for this bit, roughly 5MB -->
  </ComponentGroup>
</Fragment>
<Fragment>
  <ComponentGroup Id="ExtraStuff">
    <!-- List of components for this bit, roughly 45MB -->
    <ComponentRef Id="BigFile1"/>
  </ComponentGroup>
  <Component Id="BigFile1">
    <File Id="BigFile1_bin" Name="BigFile1.bin"/>
  </Component>
</Fragment>

安装程序是在 msbuild 中构建的。组件通过以下方式包含在项目中:

<Feature Id="ThirdPartyStuff">
  <ComponentGroupRef Id="CoreStuff"/>
  <?if $(var.Configuration) = "Full"?>
  <ComponentGroupRef Id="ExtraStuff"/>
  <?endif?>
</Feature>

最后,正如预期的那样,我得到了 LGHT0267 错误:

错误 LGHT0267:找到孤立组件“BigFile1”。如果这是一个产品,每个组件必须至少有一个父功能。要将组件包含在模块中,您必须将其直接包含为 Module 元素的 Component 元素,或通过 ComponentRef、ComponentGroup 或 ComponentGroupRef 元素间接包含。

有没有人想出如何有选择地使用 wixlib 中提供的组件的解决方法?我可以将ExtraStuff 包含为用户的单独功能,但这里的目标是缩小安装程序。我可以礼貌地要求第三方提供两个单独的 wixlib,但我想避免这样做。

【问题讨论】:

    标签: wix wix3.9 wixlib


    【解决方案1】:

    我不认为 wix 只能使用 wixlib 包的一部分。将 wixlibs 视为合并模块(没有可查看的表)。不能只消耗一半的合并模块,也不能只消耗一半的wixlib。

    恐怕你得让第三方把他们的wixlib分成两个包。

    【讨论】:

      【解决方案2】:

      经过一番挣扎,我找到了解决方法,讨厌的解决方法:

      1. 像往常一样创建虚拟 wixproject 并包含 wixlib。
      2. 添加虚拟项目作为最终项目的依赖项
      3. 在虚拟项目的构建后事件中设置要运行的 powershell 脚本,它将:
        • 使用 dark.exe 反编译 dummy.msi 并输出二进制文件(开关 -x)
        • 基于 dummy.wxs 制作 new.wxs 文件,其中包含标签以使组件具有条件
      4. 在最终项目中包含 new.wxs

      【讨论】:

        猜你喜欢
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多