类似问题:重用 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 共享该逻辑。它只对单个开发团队的单个项目有用。
我将继续回答我自己的问题,因为事实证明它是如此简单。
更改 .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)
难怪我找不到任何关于它的文档。它很容易做到,对我来说应该是显而易见的。
更新:此外,多线程用于构建多个机柜。创建多个机柜将进一步提高速度。
| 归档时间: |
|
| 查看次数: |
955 次 |
| 最近记录: |