2010-07-10 29 views
0

Je suis en train de créer un assembly .NET qui sera enregistré pour COM afin qu'il puisse être référencé par Microsoft Excel VBA. L'assembly fait référence à un assembly .NET tiers (qui contient des classes utiles) qui ne se trouve pas dans le GAC. Toutefois, le déploiement de mon assembly pose problème car le chemin d'accès à l'assembly tiers est pas toujours au même endroit (cela dépend de la localisation de l'utilisateur ainsi que de la date d'installation de l'assembly tiers). Cela signifie que lors du déploiement de mon assembly (en utilisant REGASM), en fonction du système sur lequel il est installé, REGASM tombera parfois car il ne peut pas trouver la dépendance de mon assembly sur l'assembly tiers.Plusieurs chemins de recherche pour les assemblages ne se trouvant pas dans le GAC lors de l'utilisation de REGASM & COM

Idéalement, je voudrais utiliser une liaison anticipée dans mon assembly, mais si je fais cela et que le chemin vers l'assembly tiers n'est pas la même que la référence dans Visual Studio, alors REGASM échouera. Je réalise que "Copy Local" (en VS) résoudrait cela, mais comme l'assembly tiers est parfois corrigé, je ne souhaite pas vraiment en garder une version obsolète dans le même dossier que mon assemblée.

Y a-t-il un moyen de contourner cela afin de ne pas avoir à utiliser "Copy Local"? Je suppose que je pourrais utiliser une sorte de charge dynamique de l'assembly tiers, mais pourrait encore utiliser une liaison anticipée? (et le REGASM fonctionnerait-il?)

Répondre

0

Pourquoi ne pas utiliser le 'Copy local' pour la première utilisation, et avoir une routine sur le démarrage de l'application qui passe par une liste d'emplacements possibles où la version la plus récente pourrait être et remplacer (ou programmer une dérogation lorsqu'elle n'est pas accessible, etc.) l'assemblée locale si possible.

En outre, vous souhaiterez peut-être donner à l'utilisateur une option pour définir manuellement un emplacement où la DLL doit être ouverte à partir de ce moment-là (toujours sur demande). Un autre aspect est, pourquoi voudriez-vous mettre à jour le nouvel assembly si la fonctionnalité de votre application dépend d'une certaine version, puisqu'ils changeaient un élément ou quoi que ce soit, ils échoueraient à cause de la mise à jour , juste une pensée.