5

Nous avons développé une bibliothèque en C#, et maintenant je souhaite créer un modèle de projet pour aider à utiliser la bibliothèque correctement.Quel est le meilleur moyen d'inclure des références à mes propres assemblys dans un modèle de projet?

Je souhaite que les nouveaux projets incluent une référence à l'assembly de bibliothèque, mais préfèrent ne pas avoir à déployer l'assembly dans le GAC ou dépendre de l'assembly résidant dans un emplacement spécifique.

Ce que je pense est d'inclure le fichier .dll dans le fichier .zip du modèle de projet. Cela signifie qu'il finira quelque part dans le dossier du projet de nouveaux projets. Peut-être dans un dossier nommé Lib. L'indicateur de référence dans le fichier projet peut alors pointer vers ce dossier. est-ce une bonne idée? Quels problèmes pourrais-je affronter sur la route?

Existe-t-il un mécanisme permettant d'inclure de telles bibliothèques tierces dans les modèles de projet que je ne connais pas? Comment avez-vous abordé cela? Sûrement je ne suis pas le premier.

+0

La réponse dépend en quelque sorte de la manière dont vous prévoyez de déployer vos modèles. Utilisez-vous VSIX? Utilisez-vous MSI (Windows Installer) ou d'autres technologies de déploiement à usage général? Avez-vous prévu de simplement distribuer le fichier zip et de fournir des instructions d'installation manuelles? –

Répondre

3

J'ai dû résoudre ce problème par le passé. Dans un cas, il s'agissait d'une bibliothèque de journalisation installée sur le GAC, ce qui signifiait que l'élément Reference avait simplement besoin du nom de l'assembly. Dans un autre cas, nous avons installé la bibliothèque dans le système de fichiers, créé une clé de registre contenant l'emplacement (au cas où l'utilisateur deviendrait mignon et a modifié l'emplacement d'installation) et utilisé un project template wizard pour rechercher la clé de registre et remplir un remplacement item pour avoir l'emplacement correct dans HintPath de la référence. (Remarque: l'approche de l'assistant de gabarit vous oblige à installer l'assemblage de votre assistant sur le GAC, ce que vous essayez d'éviter ...)

Si vous ne voulez pas que votre bibliothèque soit installée dans le GAC ou un emplacement spécifique, l'approche de l'inclusion de l'assemblage dans le projet est à peu près votre seule option restante. Du côté positif, le déploiement de votre modèle de projet est assez simple et vous n'avez pas besoin de passer par le GAC, les assistants personnalisés, etc. Sur le plan négatif, si vous créez une nouvelle révision de votre bibliothèque, vos utilisateurs auront besoin mettre à jour la copie de la bibliothèque de chaque projet.

+0

Quelles sont les implications de l'installation au GAC? quelles sont les raisons pour l'éviter? –

+1

L'implication principale est que la copie de l'assembly installé sur le GAC "gagne". C'est-à-dire que vous pouvez avoir une copie mise à jour dans le dossier de votre application, mais tant que le nom fort correspond, le runtime chargera préférentiellement la copie du GAC. Un exemple à peu près analogue serait comme si le chemin de l'assembly GAC'ed est la première entrée de votre variable PATH et que vous avez lancé un appel LoadLibrary. Cela peut entraîner un comportement étrange lorsque vous essayez de mettre à jour vos binaires et le comportement ne change pas mystérieusement. –

+1

En outre, bien que cela ne soit pas directement un problème GAC, l'utilisation de noms forts signifie que votre assembly requiert désormais un assembly qui correspond au nom fort sur lequel il a été compilé; vous devrez recompiler ou enregistrer une stratégie d'éditeur qui redirige les liens vers une version plus récente. –