9
votes

Réinitialisation de la compatibilité du projet dans VB6

Lorsque nous rompons la compatibilité dans une DLL VB6, je dois faire ce qui suit:

  1. défini sur aucune compatibilité binaire
  2. recompilez
  3. Réglez la compatibilité à nouveau
  4. supprimer la référence à la DLL modifiée de tous les projets qui l'utilisent
  5. Ajouter une référence à tous les projets qui l'utilisent
  6. recompilez tous ces projets
  7. Faites de même pour tous les projets qui utilisent ces projets, etc.

    Bien sûr, c'est un peu simplifié mais quiconque l'a fait avant de savoir de quoi je parle.

    Ma question est la suivante: avez-vous trouvé une meilleure façon de le faire ou avez-vous trouvé des outils (pas trop coûteux) pour faciliter ce processus? Ou mieux encore, avez-vous créé celui que vous pouvez partager avec moi :)

    Notez que je demande comment rendre ce processus plus facile, pas comment l'éviter. Alors s'il vous plaît ne donnez pas de réponses sur la façon dont il est difficile de casser la compatibilité et de ne pas le faire. Je vis dans le monde réel où il y a des choses en dehors de mon contrôle et j'essaie juste de gérer ce que j'ai.


5 Réponses :


9
votes

Dans un emploi précédent, j'avais eu une énorme application VB6 contenant des dizaines de DLL de VB6 que nous avons renvoyées à travers les projets de notre groupe de projet. Nous rompions souvent la compatibilité et nous mettons à jour manuellement les références comme si vous décrivez n'était pas une option.

Nous avons initialement développé un outil qui mettrait à jour les références dans tous les fichiers .vbp dans un dossier après avoir enfreint et recompiler, mais j'ai finalement trouvé Visual Build par Kinook Software (www.kinook.com) qui pourrait traiter cela automatiquement.

J'ai utilisé leur solution pendant de nombreuses années avec succès. Ce qui est bon à propos de leur action "gover vb6" (http://www.kinook.com/visbuildpro/manual/makevb6.htm) est qu'il peut construire un arborescence de dépendance et reconstruire tous vos projets dans votre groupe de projet dans le bon ordre, Tout en mettant à jour des références en conséquence.

Pour votre scénario, vous devez définir la "compatibilité de la version définie avant de construire" l'option "Pas de compatibilité", puis cochez la case "Définir la compatibilité binaire" afin que les projets soient retournés à la compatibilité binaire après la construction. < / p>

Si vous avez des projets que vous devez maintenir une compatibilité binaire pour, laissez-les simplement en dehors du .vbg et cela ne le reconstruirea pas.


2 commentaires

Doux. Va certainement marquer cela comme la réponse si quelqu'un d'autre ne propose pas quelque chose qui est libre dans les prochaines 24 heures ... que je doute fort :)


Malheureusement, je ne vais même pas dépenser autant d'argent en ce moment, mais je vais marquer la réponse de la réponse de toute façon parce que cela semble être exactement ce que je veux.



3
votes

échantillons supplémentaires Visual Basic 5.0 & 6.0 offre une compatibilité binaire Ajouter qui pourrait être utile. Voir le readme.txt et compatibilité binaire révisé.doc de fichiers après "installation" (il y a des étapes à suivre après avoir exécuté le téléchargement).

Ce téléchargement inclut le document "Compatibilité binaire révisée" ainsi que le complément SyncCompt.dll. La compatibilité binaire comme mise en œuvre dans Visual Basic 5.0 et Visual Basic 6.0 garantit que de nouvelles versions de produits d'expédition sont entièrement compatibles avec les versions plus anciennes. Le document explique des problèmes liés à la compatibilité binaire et à la révision des GUID et introduit la DLL. L'add-in DLL construit un nouveau fichier de compatibilité pour stabiliser votre produit (à l'exception des EXE standard qui n'ont pas de compatibilité binaire). Cet outil ne fonctionne que dans un environnement Microsoft Windows NT®.

Ceci peut ou non répondre à votre problème.


0 commentaires

1
votes

Vous ne devriez pas nécessiter de modifier le paramètre de compatibilité. Vous devez toutefois vous assurer que la DLL (ou l'EXE) que vous vous référez à votre paramètre de compatibilité est pas l'emplacement que vous êtes sur le point de compiler.

Nous faisons quelque chose de similaire, nous avons donc la structure suivante:

c: \ productName \ bin - contient tous les assemblys en direct

c: \ productname \ bin \ compatibilité - contient tous les assemblys tels qu'ils étaient dans la dernière version

Après une construction (que nous faisons automatiquement en bombardement vb6.exe), nous déplacons tout dans \ bin à \ bin \ compatibilité


8 commentaires

Brandon veut Casser Compatibilité


@MarkJ Oui, cela va casser la compatibilité car il s'agit de la comparaison avec la version précédente auquel elle peut être compatbile ou non. Lorsque vous utilisez le vb6.exe pour compiler, vous n'obtiendrez aucune interface graphique de demander si vous voulez continuer - cela continue tout juste


Peut-être que je ne comprends pas. Je suppose que vous avez une compatibilité binaire commutée et que le binaire de référence est dans bin \ compatibilité ? Vous construisez dans bin . Donc, les fichiers binaires dans bin sont compatibles binaires avec bin \ compatibilité . Ensuite, vous copiez les fichiers binaires dans bin dans bin \ compatibilité . Donc, maintenant, lorsque vous construisez à nouveau, vos nouveaux fichiers binaires sont compatibles binaires avec les fichiers binaires dans Bin \ Compatibilité I.E. Toutes les constructions précédentes. C'est une méthode pour Garder la compatibilité binaire pour toujours, pas pour la casser. Ou ai-je mal compris?


@markJ Eh bien, ils peuvent être compatibles avec ceux du répertoire BIN \ Compatibility - Il s'agit de l'emplacement de la comparaison afin que VB sait si une compilation sera ou ne cassera pas la compatibilité.


C'est l'emplacement des fichiers binaires de référence. VB Soit: (1) compile avec succès et crée des versions compatibles binaires. Ou, (2) si vous avez modifications de code de code cela signifie qu'il ne peut pas être sûr que la nouvelle version sera compatible, VB vous invite à décider de ce que vous souhaitez faire. Mais Brandon veut briser délibérément la compatibilité , même s'il a pas a fait des changements de code qui force incompatibilité.


@MarkJ oh ok alors c'est légèrement différent mais pose la question pourquoi sur la terre voudriez-vous veulent pour casser la compatibilité?


@Matt nous ne veulons pas "casser la compatibilité, mais ça arrive. Par exemple, lorsque nous avons installé le Win7 SP2, il a cassé le MDAC car Microsoft a brisé leur propre interface. Ils ont fourni une typelib compatible en arrière à utiliser, mais la commutation de références a toujours cassé la compatibilité. Il y a d'autres moments où les choses ne compilent pas assez correctement et certaines personnes ne sont pas assez intelligentes pour comprendre ce qui ne va pas. Plutôt que d'entre eux dépenser 6 heures de faire cela, j'aimerais qu'ils puissent simplement avoir un outil qui le rend simplement fonctionnant même si cela signifie une compatibilité.


@MarkJ théoriquement, Matt peut être sur quelque chose. Et si je compilais une DLL sans rien y avoir à utiliser pour la compatibilité, puis jamais la mise à jour lorsque nous effectuons de nouvelles rejets. Cela devrait garder VB de se plaindre lorsque je fais un changement de rupture parce que cela ne sera pas capable de le dire, et cela conservera l'OLD UUID. Mais cela garderait-il le code qui fait référence à une DLL modifiée de la plainte?



1
votes

J'ai trouvé le Compatibilité de la version dans Les composants ActiveX Series sur MSDN s'ils sont très éclairés sur le sujet de la compatibilité et lorsque / comment le casser. Je pose cela principalement pour référence future.


0 commentaires

0
votes

Je résolvez le problème en ne stockant pas les informations de compatibilité.

i Supprimer la ligne CompatibleExe32 = {Dllname} à partir des fichiers .vbp

Je n'ai jamais enregistré les fichiers .vbp après une construction, de sorte que la référence ne se glisse pas.


0 commentaires