Ho cercato di rompere questo negli ultimi due settimane e non ho ancora trovato una buona soluzione; spero di poter ottenere una risposta qui.Caricamento di 2 versioni di assembly in fase di esecuzione
Ho due assiemi (ZA & ZB), entrambi i quali puntano a un progetto/dll (ZC) comune ma che potrebbero essere su una versione diversa (vale a dire lo stesso nome dll, stessi spazi dei nomi, alcune classi potrebbero essere differenti) . Ogni assembly funziona da solo, tuttavia, se uno viene caricato dall'altro in fase di esecuzione (ad esempio A carichi B), quindi non riesco a farlo funzionare. Bisogno di aiuto.
Ecco il programma di installazione:
- ZA dipende ZC versione (comune) 1.1
- ZB dipende dalla versione ZC 1,0
ZA deve caricare necessità di caricare qualcosa in ZB (che dipende da ZC), in fase di esecuzione.
ZA è l'app principale. Sotto la sua directory bin
, c'è una directory di plugin plugins/plugin-ZB
con la quale vorrei posizionare tutto ZB e le sue dipendenze (ZC).
Ecco quello che ho provato finora:
Assembly.Load()
utilizzando stessa versione di dll - ha funzionato bene.
Assembly.Load()
utilizzando diverse versioni di dll - ZB carica, ma quando il metodo viene eseguito, ottengo un metodo non trovato eccezione.
AppDomain.Load()
ottenuto un errore di file non trovato; Ho persino usato il delegato per risolvere gli assembly.
Alcuni dettagli relativi a ZC: - alcuni metodi sono pubblici statici (alcuni non lo sono). Per esempio. Log.Log("hello");
- alcuni possono restituire valori (primitivi o oggetti). - alcuni metodi non sono statici (e restituiscono valori).
Aiuto? - TIA
"Si può avere una sola versione di un assembly per un AppDomain" non è vero. È anche possibile fare riferimento a due versioni di un assieme da un singolo assieme, cercare l'alias extern per maggiori informazioni, ecco la prima cosa che si apre su Google con un esempio della funzione: http://blogs.msdn.com/ b/ansonh/archive/2006/09/28/extern-alias-walkthrough.aspx – Graham
L'utilizzo di due AppDomain è una soluzione al problema descritto. – Graham
Hai ragione, rispondi aggiornato! –