2012-09-27 12 views
12

Supponendo che sul sistema siano installati .NET 4.0 e .NET 4.5.Caricamento di un assembly destinato a .NET 4.5 su un dominio di app .NET 4.0

È possibile caricare e utilizzare un assembly .NET 4.5 da un assembly scritto con targeting per .NET 4.0?

In poche parole, posso chiamare Assembly.Load dal codice .NET 4.0 per caricare un assembly di destinazione .NET 4.5?

+2

Ti consigliamo di leggere questo: http://marcgravell.blogspot.nl/2012/09/iterator-blocks-missing-methods-and-net.html too !! – sehe

+0

perché non modificare le impostazioni di generazione sugli altri progetti per utilizzare .NET4.5? –

+1

@ShaunWilde A volte questo non è possibile. Potresti avere più team o applicazioni in un'azienda, uno con .NET 4.5, uno che utilizza .NET 4.0. In un mondo ideale, questo non accade, ma nel mondo reale, spesso accade. A volte è necessario interoperare i componenti tra i due. – Nuzzolilo

risposta

11

Assumendo un sistema di .NET 4.0 e .NET 4.5:

Come indicato nel marcgravell's blog collegate da sehe

4,5 è un in-place over-the-top installare sulla parte superiore del 4.0, nel GAC; dopo aver installato 4.5, 4.0 viene eseguito con i 4,5 assemblee

Poi chiama Assembly.Load da un codice .NET mira 4.0 (compilato da un compilatore 4.0), sarà effettivamente eseguito in usando l'implementazione 4.5 quadro, così ho non vedo alcun motivo per cui non possa caricare un assembly 4.5.

note di margravell che i problemi si verificano quando si tenta di eseguire il codice compilato .NET 4.5 su un sistema con solo 4.0 installato, in quanto l'implementazione del ritorno rendimento/interruzione iteratori causa un riferimento al metodo mancante. Ma questo non dovrebbe influire su di te.

+4

Quindi come mai non funziona di default? - Che cosa in più devi fare per farlo funzionare? – BrainSlugs83

+0

Apparentemente .net-4.5 prova a comportarsi come .net-4.0 anche in alcuni casi quando questo è fatto. Ad esempio, 'System.ComponentModel.Composition' si rifiuta di chiudere i tipi generici aperti quando caricati da un assembly .net-4.5 caricato da un programma inizializzato come .net-4.0. Questo mi ha fatto male perché non mi ero reso conto che il framework era in esecuzione in modalità .net-4.0 e non potevo immaginare che questa potesse essere la causa di un comportamento diverso. – binki

Problemi correlati