2012-01-31 11 views
7

Suppongo di avere due progetti, P4 e P3, rivolti rispettivamente a. 4.0 e 3.5.La mia app .Net può fare riferimento a due diverse versioni di una libreria .net framework?

Ogni progetto ha anche un riferimento a System.Data. Nel caso della P4, sarà a System.Data v4.0.0.0 Nel caso della P3, sarà a System.Data v2.0.0.0

Progetto P4 fa riferimento anche P3.

Se P4 è caricato ed eseguito, utilizza. NET 4.0 CLR. In fase di runtime, i riferimenti a System.Data sembrano risolversi nella versione v4.0 sia in P4 che in P3. Posso sovrascriverlo usando i reindirizzamenti assemblyBinding, ma poi sia P4 che P3 risolvono con v2.0.

C'è un modo per configurare la mia applicazione in modo che P4 usi v4.0 e P3 usi v2.0?

risposta

3

Se si ha il controllo su P3, sì. Vai alla sezione dei riferimenti del progetto, trova il riferimento System.Data e visualizza la sua finestra delle proprietà (tasto destro del mouse -> Proprietà).

Selezionare "Vero" per la proprietà "Versione specifica". Ricompilare, ridistribuire, ecc.

Si noti che ciò causerà tutti i tipi di errori di runtime se .NET 2, 3 o 3.5 non sono installati sulla macchina quando l'assembly tenta di caricare.

Modifica

Ho provato questo, ma senza fortuna. P3 esegue ancora v4.0. Sai se questa impostazione avrebbe alcun effetto visibile nell'assieme generato per P3? Per esempio. Il manifest dice ".ver 2: 0: 0: 0" se "Versione specifica" è impostata su true o no.

Prova ad aggiungere questo al vostro app.config:

<configuration> 
    <startup> 
    <supportedRuntime version="v2.0.50727" /> 
    <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 
+0

Ho provato questo, ma senza fortuna. P3 esegue ancora v4.0. Sai se questa impostazione avrebbe alcun effetto visibile nell'assieme generato per P3? Per esempio. Il manifest dice ".ver 2: 0: 0: 0" se "Versione specifica" è impostata su true o no. – Rob

+1

Sì, questo è quello che ho seguito seguendo il consiglio di Seb. Inoltre, dovevo specificare useLegacyV2RuntimeActivationPolicy = "true" come attributo nel tag di avvio. Altrimenti si è arrestato in modo anomalo con Eccezione non gestita: System.BadImageFormatException – Rob

+0

Impressionante. Il suo collegamento è stato ciò che mi ha ricordato la config, quindi accetto decisamente la sua risposta. – Randolpho

4

Date un'occhiata a questo: In-Process Side-by-Side Potrebbe essere di qualche aiuto.

+1

Sì, questo è stato il trucco! – Rob

+0

Siamo spiacenti. Sono un idiota. Sfortunatamente questo non ha aiutato, a meno che mi manchi qualcosa. Sono riuscito a decommentare il reindirizzamento assemblyBinding durante il controllo di questo. Senza il reindirizzamento, non funziona. – Rob