对我们来说,大部分时间都花在调用 light(用于链接阶段)上。
light 压缩箱体的速度非常慢。将.wixproj 中的DefaultCompressionLevel 从high 更改为mszip(或low 或none)有很大帮助。但是,我们的构建仍然太慢了。
原来light独立处理cabinet,默认自动链接到多个线程。要利用这种并行性,您需要生成多个机柜。在我们的 .wxs Product 元素中,我们有以下内容将所有内容放在一个柜子中:
<MediaTemplate EmbedCab="yes" />
事实证明,您可以使用MaximumUncompressedMediaSize 属性来声明您希望文件自动分片到不同 .cab 文件的阈值(以 MB 为单位):
<MediaTemplate EmbedCab="yes" MaximumUncompressedMediaSize="2" />
现在light 更快了,即使使用high 压缩,但对于增量构建(只有少数文件更改)仍然不够快。
回到 .wixproj 中,我们可以使用以下内容来设置文件柜缓存,这对于文件更改较少且大多数文件柜不需要重新生成的增量构建来说非常理想:
<CabinetCachePath>$(OutputPath)cabcache\</CabinetCachePath>
<ReuseCabinetCache>True</ReuseCabinetCache>
抑制验证也提供了很好的加速(默认情况下,light.exe 花费了大约三分之一的时间来验证 .msi)。我们为调试版本激活它:
<SuppressValidation>True</SuppressValidation>
通过这些更改,对于 32 MB 的 .msi 输出,我们的最终(增量)构建从一分钟多到几秒,即使使用 high 压缩级别,完全重建也保持不到一分钟。