类似问题:Reusing WIX components to speed up candle/light
我的项目与引用的项目有同样的问题;每次需要构建时,一个永不改变的非常大的静态数据库被压缩到msi中。我想问一下这个问题:重复使用预压缩的cab文件来加快构建时间。
我开始按照回答的建议,使用cabCache属性。我在.wixproj中添加了以下内容:
<CabinetCachePath>cabs</CabinetCachePath>
<ReuseCabinetCache>True</ReuseCabinetCache>
然后我将静态数据分成一个片段:
<Fragmet>
<Media Id="2" Cabinet="static.cab" EmbedCab="no" />
<Component Id="staticCab" Guid="..." >
Files ...
</Component>
该片段在功能中引用:
<ComponentRef Id="staticCab" />
这创建了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
然后合并它:
<Directory Id="StaticDir" Name="static">
<Merge Id="StaticModule" Language="1033" src="..\Static\bin\Release\static.msm" />
</Directory>
<Feature ...>
<MergeRef Id="StaticModule"/>
</Feature>
即便在这之后,每次都会重建CabinetCache。
我想我的问题是使用ReuseCabinetCache的正确方法是什么。我还在学习WIX,所以如果答案很明显我会道歉。我只是不确定如何使用它。
编辑: MergeModule不理想,因为不需要与其他msi共享该逻辑。它对单个项目只对单个开发团队有用。
答案 0 :(得分:3)
我会继续回答我自己的问题,因为结果很简单。
更改.wxiproj以在
中包含这些属性<CabinetCachePath>cabs</CabinetCachePath>
<ReuseCabinetCache>True</ReuseCabinetCache>
将媒体添加到.wxs安装
<Media Id="2" Cabinet="static.cab" EmbedCab="yes" />
在存储静态文件的目录标记中,添加DiskId="2"
。
这会做几件事。首先,你告诉Wix你不要将机柜存放在重用机柜的路径中。创建新机柜并仅在其中存储静态数据(或不经常更改的数据)将导致Wix使用机柜的缓存版本。 Wix通过确保:
来验证机柜(资料来源:http://wix.sourceforge.net/manual-wix3/optimizing_builds.htm)
难怪我找不到任何文件。很容易做到这一点应该对我很明显。
更新:此外,多个线程用于构建多个机柜。创建多个机柜将进一步提高速度。