2010-04-07 2 views
3

Je vais essayer de garder ceci aussi simple que possible. J'ai un système de plugin plutôt simple qui a rencontré un problème.C# La référence DLL change de version et devient déchargable (Plugin-system)

J'ai 2 assemblées:

  • host.exe
  • plugin.dll

référence plugin.dll host.exe (qui contient des interfaces et des classes qui plugin.dll mise en œuvre et l'utilisation).

Lors de l'exécution, Host.exe charge Plugin.dll par réflexion et cela fonctionne très bien. Sauf lorsque Host.exe est mis à jour et obtient un nouveau numéro de version. Ensuite, je reçois une erreur une fois que j'essaie de charger Plugin.dll, en disant que Host.exe (avec l'ancien numéro de version) ne peut pas être trouvé.

Cela signifie que je dois reconstruire tous les plugins chaque fois que Host.exe change le numéro de build.

Quelqu'un at-il une solution à cela?

+0

Quel est le nom qualifié que vous utilisez pour charger l'assemblage? Le numéro de version devrait être facultatif, non? – harpo

Répondre

2

Il existe une solution simple, ne modifiez pas votre [AssemblyVersion], seulement votre [AssemblyFileVersion]. Pour rendre cela significatif, il est certainement préférable de déplacer les classes dont le plug-in et l'hôte ont besoin pour un assemblage séparé. Maintenant, lorsque vous effectuez une modification de rupture dans l'une de ces classes, vous pouvez modifier [AssemblyVersion] pour forcer le recompilation du plug-in. Ce qui est maintenant une bonne chose au lieu d'un problème.

2

Essayez de déplacer les interfaces référencées depuis Host.exe dans une DLL distincte, par ex. PluginSupport.dll, et ont la référence Plugin.dll qui à la place.

1

Ajoutez un fichier App.config au projet hôte avec une redirection de liaison qui redirige toutes les versions de l'assembly hôte vers la version actuelle.

Questions connexes