Миграция с 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, либо полностью удалить его и использовать встроенный.

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