Caricamento di più versioni dello stesso assembly

Sto lavorando con un assembly di terze parti e sfortunatamente ora ho bisogno di caricare la loro ultima e una versione precedente nel mio progetto, quindi in fase di esecuzione posso decidere quale caricare. Ho sempre e solo bisogno di uno, non di entrambi.

Con questo in mente, sono anche dipendente dai tipi forniti dai componenti, quindi non posso caricare ogni volta dalla riflessione e dall’interrogazione per il metodo / gli eventi / le interfacce che voglio usare. Ho visto qualche accenno a come AppDomain tramite AppDomain , ma non sono sicuro di come procedere.

Il processo dovrebbe codificare una versione del componente e quindi in fase di esecuzione (utilizzando l’ AppDomain ) nella DLL corretta che si desidera venga utilizzata? Quindi lo mangerei solo all’avvio?

Se entrambi gli assembly sono compatibili, è ansible definire nel file app.exe.config o web.config per utilizzare sempre la nuova versione dichiarando bindingRedirect.

esempio

           

questa voce di configurazione per dotnet 1.0 indica al caricatore di assembly di utilizzare sempre la versione 1.0.3300.0 indipendentemente da ciò che viene compilato nel file di chiamata. Lo stesso è ansible con le nuove versioni di dotnet

Ecco un paio di post da qui su SO che descrivono come caricare più versioni dello stesso assembly:

Questo post descrive come fare riferimento a due diverse versioni di log4net. Vedi il commento di @Joe B. sotto la risposta accettata per un po ‘più di dettaglio su come ha risolto il suo problema.

Le librerie di terze parti si riferiscono a diverse versioni di log4net.dll

Questa risposta si riferisce a questo link:

Utilizzo di versioni diverse dello stesso assembly nella stessa cartella

All’interno di questo thread, vi è un’avvertenza sul caricamento di versioni diverse dello stesso assembly nello stesso contesto e fa riferimento a questo collegamento su MSDN:

http://msdn.microsoft.com/en-us/library/dd153782.aspx#avoid_loading_multiple_versions

Ecco un altro con una risposta che suggerisce l’uso di AssemblyResolve: riferimento a due assembly uguali, solo le chiavi pubbliche differiscono

Se si hanno due versioni diverse dello stesso componente, questo significa che entrambe le versioni possono differire non solo nell’implementazione ma anche nel numero di operazioni che espongono? In questo caso, come è ansible cambiare versione se alcune funzionalità sono solo in una delle due versioni?

Ad ogni modo, se vuoi caricare le due versioni dovresti farlo in due domini di applicazione separati, perché in seguito puoi scaricare quello che non ti serve più tardi. Quindi è ansible eseguire la logica nel dominio dell’applicazione corretto, come descritto in Come si crea un dominio dell’applicazione e si esegue la mia applicazione al suo interno? .

C’è un post di blog con una soluzione qui , fare riferimento anche a questa discussione SO Caricamento di versioni diverse dello stesso assembly