2

我的任务是基于第 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”。如果这是一个产品,每个组件必须至少有一个父功能。要将组件包含在模块中,您必须将其直接包含为模块元素的组件元素,或通过 ComponentRef、ComponentGroup 或 ComponentGroupRef 元素间接包含。

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

4

2 回答 2

1

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

恐怕您必须要求第三方将他们的 wixlib 分成两个包。

于 2015-04-08T17:43:57.653 回答
1

经过一番斗争,我得到了解决方法,讨厌的解决方法:

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