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-grepしましたが、唯一の参照は次のとおりです。

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、参照を WixUI に変更するか、参照を LicenseAgreementDlg に変更すると、重複エラーはなくなりますが、代わりにシンボルが見つからないというリンクエラーが発生します。WixCop を使用して元の wxs ファイルを移行しましたが、WiX 2 ではすべてそのまま機能しました。これは、WiX 3 で WiXUI を独自の名前空間に配置する動きに関係していると推測していますが、率直に言って、何を試したらよいかわかりません。

物事がひどくうまくいかなかった場所についてのアイデアはありますか?

ありがとう、

アダム

4

1 に答える 1

0

「LicenseAgreementDlg」は、リンクしているWixUIExtension のダイアログの名前ですlight.exe。MSI データベース内のすべてのダイアログには一意の識別子が必要なので、<UIRef>WiX の LicenseAgreeementDlg ダイアログを含む標準 WiX UI (「WixUI_FeatureTree」、「WixUI_Mondo」など) の 1 つに要素を作成した可能性があります。次に、独自の LicenseAgreementDlg を参照しているため、同じ名前の 2 つのダイアログが表示されます。

この状況では、独自の LicenseAgreementDlg の名前を変更するか、完全に削除して組み込みのものを使用する必要があります。

于 2013-09-24T06:22:09.710 に答える