none
Mise à jour automatique d'une DLL Référante

    Question

  • Bonjour,

    Avant de vous expliquer ma problématique, sachez que je suis relativement débutant en C# et que j'ai déjà tenté de rechercher sur le forum sans succès. Donc voici le topo...

    Je viens de terminer un projet d'Adaptateur (projet de type Class Library) utilisable pour diverses applications. Pour utiliser l'adaptateur dans ces applications, j'ai simplement ajouté une référence.

    Ma question est la suivante : Dans le cas où j'apporte des modifications à ce projet, comment mettre à jour les applications sans avoir à les recompiler ?
    Cas concret, j'ai une liste déroulante dans une application cliente qui m'affiche tous les adaptateurs disponibles (actuellement 2), lorsque je vais ajouter un adaptateur supplémentaire, celui ci n’apparaitra pas dans la liste. Il apparaitra uniquement lorsque l'application utilisant ce projet sera recompilé...

    Avez-vous une idée de comment mettre à jour cette DLL référante dans tous les projets l'utilisant ?

    Quelque précisions : La DLL est actuellement présente en locale mais se retrouvera certainement bientôt sur un serveur du réseau. De plus, mes applications clientes sont déployés sur des pocket PC utilisant le compact framework. Enfin, j'utilise visual studio 2005.

    Voila tout,

    Par avance je vous remercie.

    mardi 10 janvier 2012 15:59

Réponses

  • Bonjour,

    Ma question est la suivante : Dans le cas où j'apporte des modifications à ce projet, comment mettre à jour les applications sans avoir à les recompiler ?
    Par défaut (et pour éviter des problèmes de conflit entre versions de DLL) cela ne fonctionnera pas. En revanche vous pouvez explicitement indiquer à vos applications qu'elles peuvent utiliser une version antérieur ou postérieur de la DLL au moment ou l'application a été compilé.

    Ce paramétrage se fait dans le fichier de configuration des applications : http://msdn.microsoft.com/en-us/library/0ash1ksb.aspx

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mardi 10 janvier 2012 17:24
  • Bonjour,

    Donc, si j'ai bien compris, il n'y a pas de solution à mon problème, cela veut dire que je suis obligé de modifier quoi qu'il arrive un fichier dans le projet utilisant la DLL ?

    Oui.

    Au passage, le fait de partager une DLL sur un serveur est une solution de type "bricolage". Il existe depuis bien longtemps la notion de "service". Il est très facile d'en fabriquer de nos jours via WCF... Vous devriez jetter un coup d'oeil, cela correspondra certainement à vos attentes.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mardi 10 janvier 2012 17:44
  • Généralement les DLLs sont dans un dossier et l'appli va les lire. Si on ajoute dans le dossier la DLL, l'application va la prendre en compte. Je dis cela parce que  "lorsque je vais ajouter un adaptateur supplémentaire" laisse penser que si la DLL est modifiée c'est pour ajouter un nouvel adaptateur et non pas pour modifier un adaptateur existant.

    Donc au lieu de  modifier la DLL existante et de finir par avoir x adaptateurs dans cette même DLL une autre approche serait de faire une DLL par adaptateur et de déployer cette nouvelle DLL.

    Comme indiqué par Gilles, on pourrait sans doute même imaginer que la liste des adaptateurs soit disponibles via un service et que la DLL voulue soit récupérée via le même principe.

    Si par contre, on entre dans le détail un groupe dédié particulièrement à Windows CE pourra être plus utile car les limitations propres à cet environnment. seront sans doute mieux connues des utilisateurs d'un tel forum.

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 10 janvier 2012 19:33

Toutes les réponses

  • Bonjour,

    Si votre dll doit être utilisée par plusieurs applications le mieux serait de l'installer dans le GAC et ainsi à chaque fois qu'elle est modifiée, il suffit de la redéployer dans le GAC des machines sur lesquelles vos applications sont installées.

    Pour plus d'information voir http://msdn.microsoft.com/fr-fr/library/yf1d93sz(v=vs.80).aspx.

    Sinon vous pouvez aussi copier votre dll une fois recompilée dans les répertoires d'installation de vos application.

    Mais pour que vous n'ayez pas besoin de recompiler vos application il faut que votre dll ne soit pas signée avec un nom fort.

     

    Cordialement.

    mardi 10 janvier 2012 16:35
  • Bonjour,

    Ma question est la suivante : Dans le cas où j'apporte des modifications à ce projet, comment mettre à jour les applications sans avoir à les recompiler ?
    Par défaut (et pour éviter des problèmes de conflit entre versions de DLL) cela ne fonctionnera pas. En revanche vous pouvez explicitement indiquer à vos applications qu'elles peuvent utiliser une version antérieur ou postérieur de la DLL au moment ou l'application a été compilé.

    Ce paramétrage se fait dans le fichier de configuration des applications : http://msdn.microsoft.com/en-us/library/0ash1ksb.aspx

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mardi 10 janvier 2012 17:24
  • Bonjour,

    Si votre dll doit être utilisée par plusieurs applications le mieux serait de l'installer dans le GAC et ainsi à chaque fois qu'elle est modifiée, il suffit de la redéployer dans le GAC des machines sur lesquelles vos applications sont installées.

    Pour plus d'information voir http://msdn.microsoft.com/fr-fr/library/yf1d93sz(v=vs.80).aspx.

    Sinon vous pouvez aussi copier votre dll une fois recompilée dans les répertoires d'installation de vos application.

    Mais pour que vous n'ayez pas besoin de recompiler vos application il faut que votre dll ne soit pas signée avec un nom fort.

     

    Cordialement.


    Merci pour votre réponse très rapide.

    Cependant j'ai oublié de préciser quelques informations qui seront certainement utiles... Les applications sont déployées sur des pocket pc (plateforme windows ce 5.0) donc après avoir lu la documentation je pense que GAC n'est pas utilisable.

    De plus, mes applications étant buildées en format CAB, pour ensuite être installées sur les mobiles, je ne peux pas copier / coller directement la librairie dedans.

    J'essaie de réfléchir à une solution, mais là je ne vois pas.

    mardi 10 janvier 2012 17:35
  • Bonjour,

    Ma question est la suivante : Dans le cas où j'apporte des modifications à ce projet, comment mettre à jour les applications sans avoir à les recompiler ?
    Par défaut (et pour éviter des problèmes de conflit entre versions de DLL) cela ne fonctionnera pas. En revanche vous pouvez explicitement indiquer à vos applications qu'elles peuvent utiliser une version antérieur ou postérieur de la DLL au moment ou l'application a été compilé.

    Ce paramétrage se fait dans le fichier de configuration des applications : http://msdn.microsoft.com/en-us/library/0ash1ksb.aspx

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5

    Merci pour votre réponse.

    Donc, si j'ai bien compris, il n'y a pas de solution à mon problème, cela veut dire que je suis obligé de modifier quoi qu'il arrive un fichier dans le projet utilisant la DLL ?

    mardi 10 janvier 2012 17:35
  • Bonjour,

    Donc, si j'ai bien compris, il n'y a pas de solution à mon problème, cela veut dire que je suis obligé de modifier quoi qu'il arrive un fichier dans le projet utilisant la DLL ?

    Oui.

    Au passage, le fait de partager une DLL sur un serveur est une solution de type "bricolage". Il existe depuis bien longtemps la notion de "service". Il est très facile d'en fabriquer de nos jours via WCF... Vous devriez jetter un coup d'oeil, cela correspondra certainement à vos attentes.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mardi 10 janvier 2012 17:44
  • Bonjour,

    QQ détails sur le contexte pourrait aider, "adaptateur" étant un terme assez général. C'est un système de "plugins" ? Dans ce cas, on mets généralement les DLLs dans un dossier ce qui permet à l'application de découvrir les nouveaux plug-ins ?

    Si c'est bien pour la mise à jour voir http://msdn.microsoft.com/en-us/library/Aa457090 pour placer la DLL dans le GAC.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 10 janvier 2012 17:57
  • Bonjour,

    QQ détails sur le contexte pourrait aider, "adaptateur" étant un terme assez général. C'est un système de "plugins" ? Dans ce cas, on mets généralement les DLLs dans un dossier ce qui permet à l'application de découvrir les nouveaux plug-ins ?

    Si c'est bien pour la mise à jour voir http://msdn.microsoft.com/en-us/library/Aa457090 pour placer la DLL dans le GAC.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    Bonsoir,

    J'utilise le pattern suivant : http://www.dofactory.com/Patterns/PatternAdapter.aspx
    C'est un système pour la mise en place de driver suivant le périphérique utilisée. L'application cliente propose de choisir parmi tous les adaptateurs disponibles en utilisant le système de Reflection.

     

    Gilles, je vais regarder WCF, merci.

    mardi 10 janvier 2012 19:15
  • Généralement les DLLs sont dans un dossier et l'appli va les lire. Si on ajoute dans le dossier la DLL, l'application va la prendre en compte. Je dis cela parce que  "lorsque je vais ajouter un adaptateur supplémentaire" laisse penser que si la DLL est modifiée c'est pour ajouter un nouvel adaptateur et non pas pour modifier un adaptateur existant.

    Donc au lieu de  modifier la DLL existante et de finir par avoir x adaptateurs dans cette même DLL une autre approche serait de faire une DLL par adaptateur et de déployer cette nouvelle DLL.

    Comme indiqué par Gilles, on pourrait sans doute même imaginer que la liste des adaptateurs soit disponibles via un service et que la DLL voulue soit récupérée via le même principe.

    Si par contre, on entre dans le détail un groupe dédié particulièrement à Windows CE pourra être plus utile car les limitations propres à cet environnment. seront sans doute mieux connues des utilisateurs d'un tel forum.

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 10 janvier 2012 19:33
  • Bonjour, Clement,

     

    Est-ce que vous avez pu avancer en utilisant les informations reçues ? Merci de tenir la communauté informée sur la suite de vos démarches.

     

    Cordialement,

     

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    vendredi 13 janvier 2012 08:01