2012-10-17 2 views
2

Je suis totalement nouveau pour WiX, alors bien sûr, ma première tâche avec WiX est de migrer un grand programme d'installation existant de WiX 2 vers WiX 3. J'ai eu un certain nombre de les rides dont la plupart ont été triées, mais je serais reconnaissant pour certaines suggestions avec les erreurs de lumière suivantes. Depuis que je suis nouveau à Wix, je veux énumérer mon processus:Migration de Wix 2 vers Wix 3: symboles en double

Pour créer une bibliothèque Wix:

candle.exe *.wxs 
lit.exe -out "wixui_company.wixlib" *.wixobj 

Pour générer le principal MSI:

candle.exe main.wxs -o main.wixobj 
light.exe main.wixobj -o Main_Installer.msi wixui_company.wixlib -ext WixUIExtension 

Cette dernière commande donne des dizaines et des dizaines d'erreurs, mais ils prennent toute la forme suivante

error LGHT0091 : Duplicate symbol 'Dialog:LicenseAgreementDlg' found. 

Je grep et re-greped, mais la que les références sont les suivantes:

En LicenseAgreementDlg.wxs:

<Fragment> 
    <UI> 
     <Dialog Id="LicenseAgreementDlg" ... 

Et wixui_company.wxs

<Fragment> 
    <UI Id="WixUI"> 
      <DialogRef Id="LicenseAgreementDlg" /> 
... 
      <Property Id="WixUI_WelcomeDlg_Next" Value="LicenseAgreementDlg" /> 

Il est la ligne de DialogRef qui donne l'erreur.

Ces deux Référencez de wixui_company.wixlib dans les main.wxs:

<UIRef Id="WixUI" /> 

FWIW, si je change soit l'arbitre pour WixUI ou l'arbitre pour LicenseAgreementDlg, les erreurs en double disparaissent, mais je reçois symbole non trouvé erreur de lien. J'ai migré les fichiers wxs d'origine en utilisant WixCop, mais sous WiX 2, ils ont tous fonctionné tel quel. Je devine que cela a à voir avec le mouvement de mettre WiXUI dans son propre espace de nom dans WiX 3, mais franchement, je n'ai aucune idée de quoi essayer.

Des idées sur les endroits où les choses se sont mal passées?

Merci,

Adam

+0

Bonjour, je suis toujours à la recherche d'aide. Des idées? – user1751585

+0

Utilisez-vous une interface WiX standard? Si oui lequel? – Neil

Répondre

0

"LicenseAgreementDlg" is the name of a dialog in the WixUIExtension que vous vous liez avec light.exe. Chaque boîte de dialogue d'une base de données MSI doit avoir un identifiant unique, donc vous avez probablement ajouté un élément <UIRef> à l'une des interfaces WiX standard ("WixUI_FeatureTree", "WixUI_Mondo", etc.), qui inclut la boîte de dialogue LicenseAgreeementDlg de WiX. Vous faites ensuite référence à votre propre LicenseAgreementDlg, vous disposez donc maintenant de deux boîtes de dialogue portant le même nom.

Dans cette situation, vous devez renommer votre propre LicenseAgreementDlg ou le supprimer complètement et utiliser celui intégré.