0

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

4

1 回答 1

1

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

于 2014-01-22T23:02:52.220 回答