none
Problème de version RRS feed

  • Question

  • Bonjour,

    je suis en train de développer une application VB.NET qui fait appel à des XXX.DLL éditées par un autre éditeur, et qui sont signées par un no de version (10.0) + strong key.
    Je ne maitrise pas l'installation de ces XXX.DLL chez les utilisateurs, car elles font partie d'un soft préinstallé (je ne peux que les invoquer), et il m'est impossibles de savoir à l'avance quelle version sera disponible (pb de licence...)

    Or l'éditeur de XXX.DLL vient de sortir une nouvelle version 12.0, totalement compatible avec les 10.0,...
    Mais, dans mon projet, lorsque je crée la référence, je ne peux indiquer qu'un no de version précis, et je serai forcément incompatible avec les autres versions de XXX.DLL (exception FileNotFound au démarrage)

    J'ai fait une tentative d'utilisation de la réflection, mais je coince lorsqu'il s'agit de gérer des exception avec des class XXXException...

    Enfin, il m'est à priori impossible d'utiliser une "application.config " pour jongler entre les versions car je livre une DLL (appelé par COM depuis une application VB6...) et non un executable...


    mercredi 13 janvier 2010 09:23

Réponses

  • Bonjour,

    L'autre solution est d'utiliser la reflection (cela vous demandera de modifier votre code), ou alors attendre la version 4.0 de C# avec le nouveau mot clé dynamic.

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    • Marqué comme réponse Alex Petrescu jeudi 21 janvier 2010 08:07
    mercredi 20 janvier 2010 22:40
    Modérateur
  • Bonjour,

    Elles sont dans la GAC... En fait, pour plus de précision, ce sont des provider DB2 d'IBM. Toutes mes applications sont écrites pour fonctionner avec les assembly 10.0, et je voudraient quelques puissent fonctionner indiféremment avec n'importe quelles versions...

    Justement, si je compile mon application avec des assembly des providers DB2 12.0, ca fonctionne très bien avec les postes installées avec la 12.0, mais plus avec les postes en 10.0...

    Pour l'instant, le "workaround" bricolé et mis en oeuvre:
    - j'ai redéfinis toutes les classes du provider  DB2 graces aux interfaces des classes ADO.NET (soit IDbCommand, IDBConnection, IDBDataAdapter,...) et je les ai mappés aux lib DB2 via des "assembly.CreateInstance", invokation,... 
    - l'assembly d'IBM est chargé via un Assembly.LoadWithPartialName(...)

    Concernant la stratégie d'éditeur: je n'ai pas vu qui que ce soit de livré avec les bib d'IBM ? Peut-on créer soit même ces assembly ?
    • Proposé comme réponse Alex Petrescu lundi 18 janvier 2010 10:48
    • Marqué comme réponse Alex Petrescu mardi 19 janvier 2010 09:13
    jeudi 14 janvier 2010 15:02

Toutes les réponses

  • Bonsoir,

    Ces assemblies sont-elles dans le GAC ? dans un même répertoire ? dans un répertoire distinct ?

    La gestion de la version de l'assembly peut être de la responsabilité de l'éditeur : en effet avec une nouvelle version d'assembly celui-ci peut fournir une "Stratégie d'éditeur " (  Publishing policy ) qui assure qu'une redirection vers la nouvelle version de l'assembly sera effectuée.
    Cette "Stratégie d'éditeur" est en fait une assembly contenant les informations de redirection et qui doit être ajouté dans le GAC.

    Est ce que l'éditeur ne fournit pas déjà ce mécanisme ?

    mercredi 13 janvier 2010 17:31
    Modérateur
  • Bonjour,

    Elles sont dans la GAC... En fait, pour plus de précision, ce sont des provider DB2 d'IBM. Toutes mes applications sont écrites pour fonctionner avec les assembly 10.0, et je voudraient quelques puissent fonctionner indiféremment avec n'importe quelles versions...

    Justement, si je compile mon application avec des assembly des providers DB2 12.0, ca fonctionne très bien avec les postes installées avec la 12.0, mais plus avec les postes en 10.0...

    Pour l'instant, le "workaround" bricolé et mis en oeuvre:
    - j'ai redéfinis toutes les classes du provider  DB2 graces aux interfaces des classes ADO.NET (soit IDbCommand, IDBConnection, IDBDataAdapter,...) et je les ai mappés aux lib DB2 via des "assembly.CreateInstance", invokation,... 
    - l'assembly d'IBM est chargé via un Assembly.LoadWithPartialName(...)

    Concernant la stratégie d'éditeur: je n'ai pas vu qui que ce soit de livré avec les bib d'IBM ? Peut-on créer soit même ces assembly ?
    • Proposé comme réponse Alex Petrescu lundi 18 janvier 2010 10:48
    • Marqué comme réponse Alex Petrescu mardi 19 janvier 2010 09:13
    jeudi 14 janvier 2010 15:02
  • Tu ne peux pas créer toi même ces assembly car il faut pouvoir les signer.

    Si la redirection avec un binding redirect depuis le fichier de config sur ton assembly ne fonctionne pas, il est également possible de la faire au niveau machine via le machine.config
    vendredi 15 janvier 2010 10:31
    Modérateur
  • Malheureusement, ces solutions ne me conviennent pas (déjà explorées...) , car :

    - pour le redirect par fichier config: ca ne fonctionne qu'au niveau application... alors que mes DLL sont invoquées par COM depuis d'autres applications, dont certaines en VB6


    - au niveau machine: je m'y refuse car mes clients sont suceptibles d'utiliser d'autres applications DB2, avec d'autres serveurs...
    lundi 18 janvier 2010 13:48
  • Bonjour,

    L'autre solution est d'utiliser la reflection (cela vous demandera de modifier votre code), ou alors attendre la version 4.0 de C# avec le nouveau mot clé dynamic.

    Cordialement
    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    • Marqué comme réponse Alex Petrescu jeudi 21 janvier 2010 08:07
    mercredi 20 janvier 2010 22:40
    Modérateur
  • Merci pour votre réponse, car je redoutais être passé à côté d'un système "plus simple"...
    C'est effectement la solution que j'ai adopté pour l'instant, faute de mieux, en espérant que le "Assembly.LoadWithPartialName()", marquée en .NET 3.5 comme étant obsolète, ne sera pas supprimé dans la .NET 4.0 et + (seule fonction à priori me permettant de récupéré un assembly à nom fort sans fournir le no de version)

    jeudi 21 janvier 2010 13:32