2013-07-30 17 views
10

enter image description hereDue versioni della stessa DLL in diversi progetti

ho una soluzione con più progetti. È necessario che io debba riferire una versione diversa dello stesso assembly in due progetti diversi. A partire da ora, ciò che sta accadendo è che solo la versione più recente della dll viene copiata nella cartella bin. Quindi la DLL che dipende dalla versione precedente non riesce con un errore

Could not load file or assembly xxxx or one of its dependencies. 
The located assembly's manifest definition does not match the 
assembly reference. 

C'è un modo per ottenere l'applicazione per utilizzare una versione specifica di dll basato sul progetto?

+11

benvenuto all'inferno dll –

+0

Si prega di fornire maggiori informazioni sulle cui esigenze eseguibili che DLL in quale versione. Sono tutti nella stessa directory? Puoi usare il regasm e la cache di assembly? Un piccolo esempio o grafico ti aiuterà molto a risolvere questo problema. –

risposta

3

Sì, è possibile fare in modo che ogni progetto faccia riferimento a una versione specifica della stessa dll. Suggerirei di inserire entrambe le versioni della DLL nel GAC. Nei tuoi progetti di riferimento, imposta Local = falso e Versione specifica = vero.

È possibile farlo senza GAC ​​utilizzando il file di configurazione e assembly binding directives (poiché le DLL condivise non possono trovarsi nella stessa cartella perché hanno lo stesso nome) ma questo è uno dei problemi principali che il GAC ha progettato risolvere. Quindi consiglierei di approfittarne.

+1

Si deve menzionare che GAC è la soluzione corretta solo se gli assembly hanno un nome sicuro (= sono firmati). – Vadim

+0

Ho usato la direttiva di assemblaggio. Ciò ha funzionato :) – developer747

+0

@ developer747: Giusto per chiarire, stavo parlando di direttive di configurazione come Probing (http://msdn.microsoft.com/en-us/library/4191fzwb.aspx). Non stavo parlando dell'uso di bindingRedirect perché in realtà non risolverebbe il tuo problema. bindingRedirect farebbe sì che entrambi i tuoi assembly usassero la stessa versione della DLL condivisa non in versioni diverse come hai dichiarato necessario. –

0

A seconda del pubblico (se si tratta di un'app server, di un sito Web, di un'app desktop per un singolo utente, di un'app desktop per molti utenti, ecc.), Si può essere in grado di imbrogliare un po 'e ospitare una versione in un dominio dell'app separato, come un servizio Web o un servizio WCF.

Per esempio, supponendo che il progetto è un'applicazione web:

MyWebApplication 
    - DLL reference to MyLibrary v1.0 
    - Only have internal references which use v1.0 of the library 
    - WCF proxy to http://localhost/MyWebService 

MyWebService 
    - DLL reference to MyLibrary v2.0 
    - Only have internal references which use v2.0 of the library 
+2

Scusa, hai letto la domanda? – Alex

+1

@Alex La domanda non distingue ciò che il pubblico dell'applicazione è - se si tratta di un'applicazione Web, e sono in grado di aggiungere un servizio WCF, allora questa soluzione funzionerà - Ho dovuto fare questo per questo ragione esatta una volta. Potrebbe essere necessario mischiare alcune classi, magari generare alcuni wrapper di servizio, ma è sicuramente una potenziale soluzione, mantenendo il codice che richiede una versione nel dominio del servizio e il codice che richiede l'altra versione nel dominio del app web GAC è potenzialmente migliore a seconda dello scenario, ma questa è solo un'altra alternativa. –

Problemi correlati