在 WIX 安装中如何使用 ReuseCabinetCache

Sau*_*ack 1 wix wix3.5

类似问题:重用 WIX 组件来加速蜡烛/灯

我的项目与引用的项目有相同的问题;每次需要构建时,都会将一个从不更改的非常大的静态数据库压缩到 msi 中。我想按照问题的要求做:重用预压缩的 cab 文件以加快构建时间。

我开始按照答案建议使用 cabCache 属性。我在 .wixproj 中添加了以下内容:

<CabinetCachePath>cabs</CabinetCachePath>
<ReuseCabinetCache>True</ReuseCabinetCache>
Run Code Online (Sandbox Code Playgroud)

然后我将静态数据分离成一个片段:

<Fragmet>
  <Media Id="2" Cabinet="static.cab" EmbedCab="no" />
  <Component Id="staticCab" Guid="..." >
    Files ...
  </Component>
Run Code Online (Sandbox Code Playgroud)

该片段在功能中被引用:

<ComponentRef Id="staticCab" />
Run Code Online (Sandbox Code Playgroud)

这创建了 cab 文件,但将其留空。我的下一个想法是使用合并模块。我创建了模块:

<Module Id="StaticModule" Language="1033" Version="1.0.0.0" >
  <Package ...>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="MergeRedirectFolder" Name=".">
        <Component Id="StaticFiles" Guid="...">
          Files...
        </ -- End all XML Tags
Run Code Online (Sandbox Code Playgroud)

然后合并它:

<Directory Id="StaticDir" Name="static">
  <Merge Id="StaticModule" Language="1033" src="..\Static\bin\Release\static.msm" />
</Directory>

<Feature ...>
  <MergeRef Id="StaticModule"/>
</Feature>
Run Code Online (Sandbox Code Playgroud)

即使在这一切之后,CabinetCache 仍然每次都在重建。

我想我的问题是使用 ReuseCabinetCache 的正确方法是什么。我仍在学习 WIX,所以如果答案很明显,我深表歉意。我只是不确定如何使用它。

编辑: MergeModule 并不理想,因为不需要与其他 msi 共享该逻辑。它只对单个开发团队的单个项目有用。

Sau*_*ack 5

我将继续回答我自己的问题,因为事实证明它是如此简单。

更改 .wxiproj 以在其中包含这些属性

<CabinetCachePath>cabs</CabinetCachePath>
<ReuseCabinetCache>True</ReuseCabinetCache>
Run Code Online (Sandbox Code Playgroud)

将媒体添加到 .wxs 安装

<Media Id="2" Cabinet="static.cab" EmbedCab="yes" />
Run Code Online (Sandbox Code Playgroud)

在存储静态文件的目录标记中,添加DiskId="2".

这将做一些事情。首先,您要告诉 Wix 您不想将机柜存放在重复使用机柜的路径中。创建一个新的机柜并只在其中存储静态数据(或不经常更改的数据)将导致 Wix 使用机柜的缓存版本。Wix 通过确保:

  • 缓存文件柜中的文件数与正在构建的文件数相匹配。
  • 这些文件的名称都是相同的。
  • 文件的顺序是相同的。
  • 所有文件的时间戳都相同。

(来源:http : //wix.sourceforge.net/manual-wix3/optimizing_builds.htm

难怪我找不到任何关于它的文档。它很容易做到,对我来说应该是显而易见的。

更新:此外,多线程用于构建多个机柜。创建多个机柜将进一步提高速度。