当我尝试编译我的WiX安装程序项目时,我收到了ICE30。完整的错误如下:
ICE30: The target file 'DPFPSH~1.DLL|DPFPShrNET.dll' is installed in
'[TARGETDIR]\Windows\DPDrv\' by two different components on an SFN system:
'DPFPShrNET.DA2BFC77_FAFE_41D1_8BB6_134232B2EADC' and
'DPFPShrXTypeLibNET.51D3E534_F1F9_4BC6_BFC5_B27F733081C7'. This breaks component reference
counting.
现在奇怪的是,这两个组件属于两个不同的合并模块,DPOTDotNet.msm和DPOTShrDotNet.msm。在Orca中查看,有问题的两个组件DPFPShrNet(它是DPOTShrDotNet.msm的一部分)有一个与之关联的dll(DPFPShrNet.dll,如文件表中所示),而DPFPShrXTypeLibNet也有一个dll与之关联的同名(DPFPShrXTypeNet.dll)。我没有看到正在安装两个DPFPShrNet.dll,因为错误说明了。
我们正在从InstallShield迁移到WiX,而InstallShield ism文件引用了这两个合并模块,并且它们都使用该方法正确安装。 WiX是否认为有两个同名文件正在安装?一旦我从我的项目中删除DpOTShrDotNet.msm,它就可以正确编译,但是我在安装后错过了GAC中的DPFPShrNet.dll。
答案 0 :(得分:1)
ICE是验证(单元测试)而不是编译。已知一些ICE存在缺陷/设计缺陷。你应该可以忽略这个。第三方合并模块可能会有问题,因此您可能希望为这些组件寻找exe / msi redist安装程序。另一种可能性是将这些MSM包装到他们自己的MSI中,并使用WiX刻录机将它们连接在一起。这为风险提供了一些分离/防火墙/缓解措施。