ICE30 при компиляции с двумя модулями слияния

Я получаю ICE30, когда пытаюсь скомпилировать проект установки WiX. Полная ошибка ниже:

 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, и файл ism InstallShield ссылается на эти два модуля слияния, и они оба устанавливаются правильно, используя этот метод. Есть ли какая-то причина, по которой WiX считает, что устанавливаются два файла с одинаковыми именами? Как только я удаляю DpOTShrDotNet.msm из моего проекта, он корректно компилируется, но я пропускаю DPFPShrNet.dll в GAC после установки.

1 ответ

Решение

ICE - это валидация (юнит-тесты), а не компиляция. Известно, что некоторые из ICE имеют ошибки / недостатки дизайна. Вы должны быть в состоянии игнорировать это. Модули слияния сторонних производителей могут быть проблематичными, поэтому вы можете вместо этого искать установщик exe/msi redist для этих компонентов. Другая возможность состоит в том, чтобы обернуть этих MSM в их собственные MSI и использовать цепочку записи WiX, чтобы связать все это вместе. Это обеспечивает некоторое разделение / брандмауэр / снижение рисков.

Другие вопросы по тегам