2010-10-17 22 views
14

La nostra applicazione è costruita con VS 2008, utilizza Linq e ha Target Framework impostato su .NET Framework3.5.Come forzare un'applicazione ad utilizzare .NET 3.5 o successivo?

Funziona correttamente quando sulla macchina è installato solo .NET 3.5 o 4.

Tuttavia, su macchine in cui sono installati entrambi .NET 2 (o 3.0) e .NET 4, l'applicazione viene caricata con .NET 2 e si arresta in modo anomalo quando si accede a Linq, mentre cerca le librerie .NET 3.5.

L'utilizzo del tag in app.config non sembra essere di aiuto, in quanto specifica la versione CLR, che è 2 nel caso di .NET 3.5.

Si noti che la nostra installazione verifica che .NET 3.5 o superiore sia installato.

C'è un modo per dire l'applicazione a carico:

  • il più alto CLR che trova, o
  • CLR 4 se installato, e CLR 2 se CLR 4 non è installato, oppure
  • CLR 2 se .NET 3.5 è installato e CLR 4 se .NET 3.5 non è installato

(Si noti che domanda simile è rimasto senza risposta in the Community Content section of the Element documentation)

risposta

13

Formare la questione mi ha portato a una risposta. Come menzionato in the Element documentation,

Quando sono supportate più versioni del runtime , il primo elemento dovrebbe specificare il più preferito versione del runtime, e l'ultimo elemento dovrebbe specificare la versione meno preferito.

Quindi il modo per raggiungere la seconda opzione ("CLR 4, se installato, e CLR 2 è CLR 4 non è installato") è quello di invertire l'ordine degli elementi in app.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0"/> 
     <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

In questo modo, .NET 4 verrà caricato se è installato, e una versione precedente verrà caricata se non.

+1

Impossibile eseguire il debug con questa configurazione: genera un errore e .NET 4 non è supportato da VS2008. Tuttavia, funziona bene per eseguire la versione di rilascio al di fuori di VS. – ChrisF

+0

Ho avuto esperienze con l'avvio delle app se l'elemento non si trova alla fine del file (poco prima di), almeno su Framework v3.5. Vale la pena provare a spostare questa parte di configurazione verso la fine del file se si riscontrano problemi di avvio. – SteveWilkinson

+0

Se ho lasciato solo v4.0 come SupportedRuntime e nel sistema è solo v4.5, comunque lo farà il v.4.5? Come forzare l'utilizzo di una sola versione? – Kamilos

-1

Se si ha un EXE non gestito che chiama una DLL .NET, è necessario creare anche un file foo.exe.config, contenente il blocco <startup>... precedente.

0

Un altro collegamento utile è this page su MSDN. Questo mostra tutti i valori richiesti in app.config se vuoi semplicemente indirizzare il profilo del client o se richiedi il profilo completo.

0

.NET Framework versione 3.0 e 3.5 utilizzano la versione 2.0.50727 del CLR.

Problemi correlati