Миграция с Wix 2 на Wix 3: повторяющиеся символы
Я совершенно новичок в WiX, поэтому, конечно же, моя первая задача с WiX - перенести существующую большую программу установки с WiX 2 на WiX 3. У меня было множество морщин, большинство из которых было отсортировано, но я был бы признателен для некоторых предложений со следующими легкими ошибками. Поскольку я новичок в WiX, я хочу перечислить весь мой процесс:
Чтобы создать библиотеку WiX:
candle.exe *.wxs
lit.exe -out "wixui_company.wixlib" *.wixobj
Для генерации основного MSI:
candle.exe main.wxs -o main.wixobj
light.exe main.wixobj -o Main_Installer.msi wixui_company.wixlib -ext WixUIExtension
Эта последняя команда дает десятки и десятки ошибок, но все они принимают следующую форму
error LGHT0091 : Duplicate symbol 'Dialog:LicenseAgreementDlg' found.
У меня есть grep и re-greped, но единственными ссылками являются следующие:
В LicenseAgreementDlg.wxs:
<Fragment>
<UI>
<Dialog Id="LicenseAgreementDlg" ...
И в wixui_company.wxs
<Fragment>
<UI Id="WixUI">
<DialogRef Id="LicenseAgreementDlg" />
...
<Property Id="WixUI_WelcomeDlg_Next" Value="LicenseAgreementDlg" />
Это строка DialogRef, которая дает ошибку.
На оба они ссылаются из wixui_company.wixlib в main.wxs:
<UIRef Id="WixUI" />
FWIW, если я изменю либо ссылку на WixUI, либо ссылку на LicenseAgreementDlg, дублирующиеся ошибки исчезнут, но вместо этого я получу символ не найденные ошибки ссылки. Я перенес оригинальные wxs-файлы с помощью WixCop, но под WiX 2 все они работали как есть. Я предполагаю, что это связано с движением по включению WiXUI в его собственное пространство имен в WiX 3, но, честно говоря, я понятия не имею, что даже попробовать.
Любые идеи о том, где все пошло не так?
Спасибо,
Адам
1 ответ
"LicenseAgreementDlg" - это имя диалога в расширении WixUIE, с которым вы связываетесь light.exe
, Каждый диалог в базе данных MSI должен иметь уникальный идентификатор, так что, скорее всего, вы сделали <UIRef>
элемент к одному из стандартных интерфейсов WiX ("WixUI_FeatureTree", "WixUI_Mondo" и т. д.), который включает в себя диалоговое окно LicenseAgreeementDlg WiX. Затем вы ссылаетесь на свой собственный LicenseAgreementDlg, так что теперь у вас есть два диалога с одинаковым именем.
В этой ситуации вам нужно либо переименовать свой собственный LicenseAgreementDlg, либо полностью удалить его и использовать встроенный.