2012-03-29 13 views
5

Se ho una libreria compilata in .NET 4 e la si fa riferimento da un eseguibile .net 4.5, quale versione del framework eseguirà le operazioni definite nella libreria?Quale versione di framework .net eseguirà una libreria in

Ho un'app cli costruita in .net 4.5 e fa riferimento a entrambi i progetti .net 4 e .net 4.5 e mi chiedo se entrambi utilizzeranno la stessa versione dei componenti di ADO.net.

risposta

5

Entrambi correranno nello stesso CLR (4.5 in questo caso).

Con .NET < = 3.5, è possibile avere casi in cui verranno caricate più versioni dello stesso assembly (quindi, potrebbe accadere che ADO.NET carichi la versione 4.0 e carichi 4.5 nello stesso dominio dell'app). Per quanto ne so, l'hanno eliminato con CLR 4.0 (o almeno lo hanno reso molto meno).

Modifica: BTW: c'è una differenza tra il CLR (il runtime che esegue il codice) e le versioni degli assiemi caricati.

La versione di CLR regola le funzionalità del processo: cosa può fare, quali versioni degli assiemi può caricare. Ad esempio, CLR 4.5 può caricare praticamente tutti gli assembly (1.0 -> 4.5). Funzioneranno tutti sotto il 4.5 CLR. Inoltre, non è possibile eseguire due versioni di CLR dalla stessa banda compatibile nello stesso processo. CLR 4.5 e 4.0 entrambi sono considerati la stessa compat banda, quindi verrà caricato uno o l'altro. CLR 1.0, 1.1, 2.0, 3.0 e 3.5 sono tutti considerati nella stessa compat banda, quindi solo uno di essi può essere caricato. È tuttavia possibile caricare CLR 3.5 e CLR 4.5 contemporaneamente.

+0

Ho pensato che se si fa riferimento a un assembly che ha come target un framework diverso, si sono verificati errori di compilazione. –

+1

Solo se c'è un'interruzione binaria (che sono pochi e lontani tra loro) o se si sta tentando di fare riferimento a un assembly che punta a una versione CLR più avanzata (quindi, un assembly 2.0 che fa riferimento a un assembly 4.0 si interromperà. L'opposto non lo farà) –

+0

I penso che si romperà anche se si specifica una versione diversa dell'assembly. Ad esempio, hai assembly build in 4.0 e hai specificato in web.config (o dovunque sia stato caricato da) 3.5 – Thea

Problemi correlati