2

我对 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 行。

这些都是从 main.wxs 中的 wixui_company.wixlib 引用的:

<UIRef Id="WixUI" />

FWIW,如果我将 ref 更改为 WixUI 或将 ref 更改为 LicenseAgreementDlg,重复错误就会消失,但我会得到符号未找到链接错误。我使用 WixCop 迁移了原始的 wxs 文件,但在 WiX 2 下它们都按原样工作。我猜这与将 WiXUI 放在 WiX 3 中自己的命名空间中的举动有关,但坦率地说,我什至不知道该尝试什么。

关于事情哪里出了问题的任何想法?

谢谢,

亚当

4

1 回答 1

0

“LicenseAgreementDlg”是您使用链接到的 WixUIExtension 中的对话框的名称light.exe。MSI 数据库中的每个对话框都必须有一个唯一标识符,因此您可能已经<UIRef>为标准 WiX UI(“WixUI_FeatureTree”、“WixUI_Mondo”等)之一创建了一个元素,其中包括 WiX 的 LicenseAgreeementDlg 对话框。然后您将引用您自己的 LicenseAgreementDlg,因此现在您有两个同名的对话框。

在这种情况下,您需要重命名您自己的 LicenseAgreementDlg 或完全删除它并使用内置的。

于 2013-09-24T06:22:09.710 回答