Dépendance transitive provoquant une version conflictuelle de la même DLL

Quelle est la meilleure pratique dans le monde .NET pour gérer les dépendances transitives qui provoquent des conflits de version?

En détail: Le projet A dépend du projet B, qui à son tour dépend de la bibliothèque C

également

Le projet A dépend également du projet X, qui dépend d’une version DIFFERENT et (potentiellement) incompatible de la bibliothèque C.

A-> B-> Cv1.0
Et
A-> X-> Cv2.0

Cv1.0 Cv2.0

  • Y at-il un moyen de faire ce travail?

  • Peut-on le faire SANS utiliser le GAC?

  • Peut-on le faire même si B et X sont uniquement au format binary (source non accessible)?

En d’autres termes, existe-t-il un moyen de permettre aux projets B et X d’utiliser chacun leurs propres dépendances lorsqu’ils sont utilisés ensemble dans le projet A sans provoquer de conflits?

NOTE: Je me rends compte que, idéalement, je ne devrais pas avoir ce problème du tout mais que la dépendance vis-à-vis de bibliothèques externes s’agrandit, ce sera un effet secondaire inévitable. Je me demande donc comment devrait-il être traité au mieux?

Il y a beaucoup de questions similaires sur le débordement de stack. Par exemple, référencer 2 versions différentes de log4net dans la même solution

Résumé:

  1. Assurez-vous de déployer l’assembly C dans les dossiers 1.0 et 2.0, respectivement, dans le dossier contenant l’exécutable principal.
  2. Changez le fichier app.config et incluez quelque chose comme:
            

vous pouvez obtenir le jeton de clé publique de C à l’aide de sn -T C.dll

Si la v1.0 et la v2.0 of C ont une clé publique différente (même si, idéalement, elles ne devraient pas l’être), incluez deux balises dependAssembly.