Une solution (ou une solution de contournement) serait d'installer les deux versions dans le Global Assembly Cache (GAC) sur la machine(s) sur lequel votre logiciel a besoin de courir, de référence et assemblées à l'aide de leurs noms forts. Cela suppose que les assemblées n'ont, en effet, les noms forts.
L'installation se fait dans le GAC va être une douleur si vous avez plus d'un peu de développeurs ou si vous envisagez de déployer votre solution à de nombreux ordinateurs (par exemple un utilisateur final de l'application). Dans ce cas, je crois (mais je peux me tromper) que votre seule option est de fusionner l'un des deux versions dans l'assemblée exigeant que version. Dans votre cas particulier, vous avez besoin d' Castle.DynamicProxy2.dll
v2.1 pour être fusionnés en NHibernate.dll
.
Vous pouvez utiliser un outil appelé ILMerge de fusionner les assemblées. La commande que vous aurez besoin pour exécuter ressemble à quelque chose comme ceci (non testé):
ILMerge /t:library /internalize /out:Deploy/NHibernate.dll
NHibernate.dll Castle.DynamicProxy2.dll
L' /internalize
commutateur indique ILMerge pour marquer tous types à partir de la seconde assemblée (le Château dans le cas présent) internal
à la sortie de l'assemblée. Sans cela, vous risquez d'avoir des erreurs de compilation lorsque vous essayez de compiler un projet de référencement à la fois votre nouveau NHibernate.dll
et la durée de la version de Castle.DynamicProxy2.dll
v2.2, car elles contiennent des classes avec exactement les mêmes noms.