Переход с 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, но, честно говоря, я понятия не имею, что даже попробовать.

Есть идеи, где что-то пошло не так?

Спасибо,

Адам


person user1751585    schedule 17.10.2012    source источник
comment
Привет, я все еще ищу помощи. Любые идеи?   -  person user1751585    schedule 17.10.2012
comment
Вы используете стандартный интерфейс WiX? Если да, то какой?   -  person Neil    schedule 21.10.2012


Ответы (1)


"LicenseAgreementDlg" — это имя диалога в WixUIExtension, на который вы ссылаетесь с помощью light.exe. Каждое диалоговое окно в базе данных MSI должно иметь уникальный идентификатор, поэтому, вероятно, вы создали элемент <UIRef> для одного из стандартных пользовательских интерфейсов WiX («WixUI_FeatureTree», «WixUI_Mondo» и т. д.), который включает диалог WiX LicenseAgreementDlg. Затем вы ссылаетесь на свой собственный LicenseAgreementDlg, так что теперь у вас есть два диалоговых окна с одинаковыми именами.

В этой ситуации вам нужно либо переименовать собственный LicenseAgreementDlg, либо полностью удалить его и использовать встроенный.

person Stephen Jennings    schedule 24.09.2013