Dipendenza transitoria che causa la versione in conflitto della stessa DLL

Qual è la migliore pratica nel mondo .NET per gestire le dipendenze transitive che causano conflitti di versione?

In dettaglio: il progetto A dipende dal progetto B, che a sua volta dipende dalla libreria C

anche

Il progetto A dipende anche dal progetto X, che dipende da una versione DIVERSA e (potenzialmente) incompatibile della libreria C.

A-> B-> Cv1.0
&
A-> X-> Cv2.0
dove
Cv1.0 Cv2.0

  • C’è un modo per farlo funzionare ?

  • Può essere fatto SENZA usare il GAC?

  • Può essere fatto anche se B e X sono solo in formato binario (fonte non accessibile)?

In altre parole, esiste un modo in cui posso utilizzare Project B e X ciascuno utilizzando le proprie dipendenze quando vengono utilizzati insieme nel Progetto A senza causare conflitti.

NOTA: mi rendo conto che idealmente non dovrei avere questo problema, ma poiché la dipendenza dalle librerie esterne si espande, questo sarà un effetto collaterale inevitabile. Quindi mi chiedo se dovesse accadere come meglio affrontarlo.

Ci sono un sacco di domande simili su Stack Overflow. Ad esempio, referenziamento di 2 diverse versioni di log4net nella stessa soluzione

Sommario:

  1. Assicurarsi di distribuire l’assembly C nelle cartelle 1.0 e 2.0 rispettivamente all’interno della cartella contenente l’eseguibile principale.
  2. Cambia il file app.config e includi qualcosa come segue:
            

è ansible ottenere il token di chiave pubblica di C utilizzando sn -T C.dll

Se v1.0 e v2.0 di C hanno una chiave pubblica diversa (anche se idealmente non dovrebbero), allora includi due tag dependentAssembly.