2009-06-29 8 views
2

Je travaille dans VS2008. J'ai une bibliothèque de classes personnalisée (CL1) qui fait référence à une autre bibliothèque de classe personnalisée (CL2). Cela finit par avoir CL1 et CL2 dans mon dossier de version. Maintenant, le consommateur de CL1 doit inclure deux dll dans le projet, ce qui ne me semble pas approprié. J'ai le sentiment fort qu'il doit y avoir un moyen d'obtenir une solution DLL unique. Existe-t-il une méthode recommandée (directive-d) pour y parvenir?Bibliothèque de classes multiples .NET dans une bibliothèque

La fusion de CL1 et CL2 n'est pas une option car CL2 est plus commun et référencé dans plusieurs autres projets/dll. Est-ce que je manque une option directe? Ou j'ai besoin d'intégrer CL2 comme ressource? Comment? Web googlé mais n'a pas pu trouver le problème discuté n'importe où.

+0

Pourquoi ne pas simplement distribuer les deux DLL? Ceci est fait automatiquement dans le processus de déploiement de votre application. De cette façon, vous pouvez les mettre à jour avec des versions plus récentes en toute simplicité. – Trap

+1

Je ne vois pas de problème à distribuer plusieurs assemblages. C'est une chose courante - la plupart des bibliothèques .Net sont divisées en plusieurs assemblées, et il y a souvent un assemblage "de base" inclus même si vous ne l'utilisez pas explicitement. – Groo

Répondre

0

Eh bien, vous pourrait intégrer CL2 en CL1 et utiliser l'événement AssemblyResolve pour l'extraire en cas de besoin, par je ne vous conseille vraiment pas d'aller de cette façon. Il suffit d'inclure la DLL dans la version, c'est la façon normale de la distribuer, je dirais.

+0

Merci pour la réponse, Fredrik. Est-il normal de distribuer plusieurs dll lorsque le consommateur de la DLL ne va utiliser que des classes dll principales. N'y at-il un moyen de package plusieurs DLL en un. Je comprends que l'incorporation de DLL en tant que fichiers binaires n'est pas une bonne idée. – amrahs

1

Vous pouvez inclure le code source de CL2 en tant que fichiers liés dans le projet CL1, et l'utiliser comme un moyen d'éviter d'obliger l'utilisateur à inclure plusieurs références. À mon avis, c'est une mauvaise idée. Si votre classe requiert vraiment que vos classes soient réparties entre plusieurs assemblages, et que CL1 doit se référer à CL2, alors c'est parfaitement bien pour l'utilisateur de se référer à plusieurs assemblages - d'autant plus que, comme vous le dites, les assemblages servir à des fins différentes.

Si l'utilisateur utilise uniquement des classes de CL1, il n'aura pas besoin d'ajouter plusieurs assemblages comme références. Cependant, si CL1 se réfère à CL2, CL2 sera toujours copié avec CL1, même si la référence à CL2 n'est pas explicite.

+0

J'apprécie vos réponses. Ma préoccupation ici est que CL2 est comme une DLL externe pour notre département, nous pouvons seulement le référencer. Maintenant, CL2 se réfère à CL1 en interne seulement et le consommateur de CL1 n'a rien à voir avec CL1 - apparemment. Je ne pouvais pas vous comprendre la dernière phrase "... CL2 sera toujours copié ..." - voulez-vous dire automatiquement? Je ne pouvais pas l'avoir. – amrahs

+0

correction - J'apprécie vos réponses. Ma préoccupation ici est que CL2 est comme une DLL externe pour notre département, nous pouvons seulement le référencer. Maintenant, CL2 se réfère à CL1 en interne seulement et le consommateur de CL1 n'a rien à voir avec CL2 - apparemment. Je ne pouvais pas vous comprendre la dernière phrase "... CL2 sera toujours copié ..." - voulez-vous dire automatiquement? Je ne pouvais pas l'avoir. – amrahs

+0

Je voulais dire que si vous créez CL1 qui a une référence à CL2, alors CL2 finit dans votre sortie de construction. Votre utilisateur se référera à CL1, qui copiera CL1 dans son répertoire de construction.CL2 sera également copié automatiquement, puisque CL1 l'exige, même si l'utilisateur n'a pas spécifiquement ajouté de référence à CL2. Le seul moment où l'utilisateur doit ajouter CL2 comme référence est si vous avez des classes de CL1 héritant des classes en CL2, ou en utilisant des classes comme paramètres de méthode, etc ... est-ce le cas? –

0

Je crois que cette question peut vous donner la réponse que vous cherchez:

How to link a .DLL statically?

+0

Nos deux sont des bibliothèques C#. Je ne pouvais pas trouver un moyen de lier la DLL statique dans la réponse et je ne sais pas si cela résout le problème. Merci quand même. – amrahs

4

Oui, vous pouvez le faire manuellement avant de libérer votre produit en utilisant ILMerge. Plus de détails peuvent être trouvés ici au codeproject et sur Brad McCabe's blog.

+0

+1 jamais utilisé cela, mais semble prometteur –

+0

Moi aussi. Je vais faire d'autres recherches à ce sujet. – amrahs

+0

Voici un lien vers la page MS Research de Brad, qui peut aussi être utile: http://research.microsoft.com/fr-fr/people/mbarnett/ilmerge.aspx – RichardOD

Questions connexes