ICE30在使用两个合并模块进行编译时

时间:2014-01-22 17:29:45

标签: wix merge-module internal-compiler-error

当我尝试编译我的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。

1 个答案:

答案 0 :(得分:1)

ICE是验证(单元测试)而不是编译。已知一些ICE存在缺陷/设计缺陷。你应该可以忽略这个。第三方合并模块可能会有问题,因此您可能希望为这些组件寻找exe / msi redist安装程序。另一种可能性是将这些MSM包装到他们自己的MSI中,并使用WiX刻录机将它们连接在一起。这为风险提供了一些分离/防火墙/缓解措施。