IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

modularité et dépendances dynamiques


Sujet :

Dotnet

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut modularité et dépendances dynamiques
    Bonjour,

    j'aimerais comprendre comment en dot NET, peut-on mettre en oeuvre la modularité et des dépendances dynamiques.

    Je m'explique :

    je voudrais avoir un programme A qui utilise les bibliothèques B et C. Cette bibliothèque B utilise elle aussi la bibliothèque C.

    Je voudrais pouvoir faire évoluer ma bibliothèque C sans avoir forcément à recompiler la bibliothèque B pour mettre à jour la dépendance.

    Est-ce possible ? Comment procéder ?

    Merci à vous.

  2. #2
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Citation Envoyé par behess Voir le message
    Bonjour,

    j'aimerais comprendre comment en dot NET, peut-on mettre en oeuvre la modularité et des dépendances dynamiques.

    Je m'explique :

    je voudrais avoir un programme A qui utilise les bibliothèques B et C. Cette bibliothèque B utilise elle aussi la bibliothèque C.

    Je voudrais pouvoir faire évoluer ma bibliothèque C sans avoir forcément à recompiler la bibliothèque B pour mettre à jour la dépendance.

    Est-ce possible ? Comment procéder ?

    Merci à vous.
    Si B utilise C et que dans C tu modifies les prototypes des membres publics qui sont utilisés dans B, tu seras obligé de modifier et recompiler B.

    Si tu ne modifies dans C que des membres privés ou des algorithmes, dans ce cas là tu n'auras pas besoin de recompiler B... mais ça ce n'est pas particulier à .NET, c'est pareil partout.
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Oui tout à fait, mais si j'ajoute une classe ou une méthode... est-ce que Visual Studio va me faire #### et me dire que c'est pas la bonne version de la dll etc... ???

    En fait j'ai plus l'habitude du java ou tu peux remplacer une bibliothèque par une nouvelle version sans qu'il n'y ait de problème... en théorie.

  4. #4
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Citation Envoyé par behess Voir le message
    Oui tout à fait, mais si j'ajoute une classe ou une méthode... est-ce que Visual Studio va me faire #### et me dire que c'est pas la bonne version de la dll etc... ???
    Tout dépend si tu signes tes assemblies ou pas.
    Dans le cas où elles sont signées, tu risques d'avoir des problèmes en remplaçant une DLL par une autre (en fait je crois qu'il contrôle le n° de build).

    Si elles ne sont pas signées, pas de problème
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    En fait, si il y a un problème : si je change la librairie C sans recompiler la B, alors quand je compile le programme A qui utilise à la fois B et C, il me dit qu'il y a conflit... c'est à dire : l'assembly de la librairie B moucharde et averti qu'il est lié à une autre version de la librairie C ! Autrement dit : les assembly (dll) semblent connaitre (conserver) la version des assembly (dll) liés à la compilation ! C'est un peu ######, non ? Comment faire pour bypasser ce check ?

    Edit : à vérifier si ça bloque à l'exécution... mais je ne suis pas sûr. C'est juste qu'à la compil que j'ai vu un warning (non bloquant vous me direz).

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Premier test:

    LibrairieC est compilé.
    LibrairieB est compilé avec une référence à LibrairieC.
    testMain est compilé avec une référence à LibrairieB et LibrairieC.

    Ok, tout va bien.

    Second test:

    Librairie C est modifiée et recompilée.
    testMain est recompilé et j'obtiens :

    Avertissement : impossible de copier la dépendance 'LibrairieC, Version=1.0.3348.26416, Culture=neutral' du projet 'testMain' dans le répertoire d'exécution, car elle remplacerait la référence 'LibrairieC, Version=1.0.3348.28321, Culture=neutral'.
    Je me dis: ok je vais supprimer les dossier obj et debug pour être sûr, je recompile, mais c'est toujours la même erreur !!! C'est quoi cette erreur à la noix ????

    Par contre, pour reprendre ce que je disais : à l'exécution, pas de problème si je ne recompile pas le testMain : comme tu disais ça passe avec la nouvelle version de LibrairieC : testMain et LibrairieB utilisent bien la nouvelle librairie sans remonter d'erreur.

  7. #7
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Est-ce que tu as essayé de compiler tes assemblies sans les signer ?
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par Gold Bug Voir le message
    Est-ce que tu as essayé de compiler tes assemblies sans les signer ?
    Rien n'est signé ! juste un assembly.cs avec les infos de base (pas d'infos de signature par contre).

    Arglll

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    juste par hasard...Dans les références entre librairies, la mention specific version est bien false ?

    Parce que ça sent l'inverse en fait..

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par B.AF Voir le message
    juste par hasard...Dans les références entre librairies, la mention specific version est bien false ?

    Parce que ça sent l'inverse en fait..
    Où est la mention specific ici ?
    Est-ce le terme "version" ? Il suffirait de l'enlever ? Mais comment suivre les différentes version de la librairie importée ?
    Images attachées Images attachées  

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Ah c'est du VS2003 ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par B.AF Voir le message
    Ah c'est du VS2003 ?
    Ah oui |-( malheureusement...

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Pas étonnant alors...On va faire ça en itératif.
    (Et donc, tu n'as pas le Service pack ?)

    1 - Sur la solution,
    Tu te mets en mode "Debug", et tu fais un clean de la solution
    Tu te mets en mode "release", et tu fais un clean de la solution
    2 - Tu fais une recherche dans le répertoire de la solution '*.DLL'.
    Tu devrais la voir si c'est ça.
    3 - Tu supprimes la(les) dll qui restent (qui peuvent etre des copies manuelles ou autre)
    4 - Tu build, et tu ré-essayes.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par B.AF Voir le message
    Pas étonnant alors...On va faire ça en itératif.
    (Et donc, tu n'as pas le Service pack ?)

    1 - Sur la solution,
    Tu te mets en mode "Debug", et tu fais un clean de la solution
    Tu te mets en mode "release", et tu fais un clean de la solution
    2 - Tu fais une recherche dans le répertoire de la solution '*.DLL'.
    Tu devrais la voir si c'est ça.
    3 - Tu supprimes la(les) dll qui restent (qui peuvent etre des copies manuelles ou autre)
    4 - Tu build, et tu ré-essayes.
    Tu vas rire, dans ma version il n'y a même pas d'option clean... je rame à chaque fois : je quitte VS, je kill les dossier obj et bin et je rouvre VS pour regénérer...

    En fait j'ai déjà fait ça sur le projet de test principal, en laissant la référence à la DLL de la librairie B et à celle de la librairie C. Mais ça ne change rien.

  15. #15
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Mais tes références, elles sont entres projets ou entre dll ?

    Ce qui est difficile à comprendre c'est qu'entre projet, tu ne devrais pas avoir cela..

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Ce qui t'arrive ne peut être du qu'au principe que la dll que tu références "LibrairieC" est dans le GAC.

    "A qui utilise les bibliothèques B et C";
    "Cette bibliothèque B utilise elle aussi la bibliothèque C."
    Donc B référence le projet C; et A référence les projet B et C ?

    Peux tu juste recréer les références ainsi :

    Tu les supprimes
    Tu t'assures que les prends les références en "add references" ou l'équivalent français
    Tu t'assures de référencer les projets et pas les DLL

    et avant tu peux essayer ça :
    C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin>gacutil /U
    LibrairieC
    Pour être certain qu'elle n'est pas dans ton gac.

    Et là tu peux builder.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 255
    Points : 99
    Points
    99
    Par défaut
    Donc B référence le projet C; et A référence les projet B et C ?
    presque :
    B référence la librairie (DLL) généré par le projet C ; et A référence les librairies B et C (pas les projets).

    Peux tu juste recréer les références ainsi :

    Tu les supprimes
    Tu t'assures que les prends les références en "add references" ou l'équivalent français
    Tu t'assures de référencer les projets et pas les DLL
    Non, les projets sont censés être indépendants (évolution parallèle), impossible de faire une référence par projet.

    Pour être certain qu'elle n'est pas dans ton gac.
    Rien dans le GAC.

    Et là tu peux builder.
    J'aimerais que ce soit si facile

  18. #18
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Ah....C'est donc ça ton problème.

    La logique de compilation fonctionne si à priori tes projets sont référencés, et dans ce cas VS fa faire une compilation 'conditionnelle'.

    Là, je pense que tu as juste ton projet a qui référence la DLL au mauvais endroit, vu qu'il arrive à la copier.

    Il faudrait que tu regardes das quelle path il cherche la dll LibrairieC et vérifier que c'est bien là que quand tu buildes LibrairieC il pose la dll.

    Parce qu'à priori tu arrives à trouver l'ancienne version.

    Donc elle est forcémment quelque part..?

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/04/2012, 04h44
  2. Injection de dépendance, AOP dynamique
    Par davcha dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 24/06/2010, 20h08
  3. Réponses: 5
    Dernier message: 03/05/2010, 09h40
  4. [Framework] Injection d'une dépendance initialisée avec passage dynamique d'arguments
    Par Samouraï virtuel dans le forum Spring
    Réponses: 1
    Dernier message: 24/12/2009, 12h48
  5. Lib statique avec dépendances dynamiques
    Par Ange_blond dans le forum VC++ .NET
    Réponses: 6
    Dernier message: 05/10/2009, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo