Domanda

Dopo l'aggiornamento da VS11 BETA a VS2012 RC - Ho modificato dal targeting .NET 4.0 a .NET 4.5.Ho notato in app.config seguendo la sezione

<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
.

Qual è il sopra per?

Quando ho provato a creare un nuovo progetto (non aggiornare il progetto esistente) da VS2012 RC non vedo la sezione sopra in app.config

È stato utile?

Soluzione

Questo è un effetto collaterale del Quagnatore Eternal .NET Vectoring. .NET 4.5 non è una versione laterale di .NET Framework, sostituisce completamente A .NET 4.0 Installa. Molto simile a 3.0 e 3.5 ha sostituito un'installazione .NET 2.0.

Gli aggiornamenti 3.0 e 3.5 erano piuttosto lievi, il framework ha appena acquisito un sacco di nuovi assemblee. Le assemblee CLR e Core Base Class non sono cambiate. Molto.

Il file CLR.DLL incluso con la versione 4.5 del framework ha ancora il numero di versione 4.0.30319. Lo stesso numero di versione della versione 4.0 del CLR. E non ha problemi a eseguire app .NET che mirano a destinazione il quadro .NET 4.0.

Quella versione quadro è stata tuttavia fortemente modificata internamente. Ha acquisito la proiezione della lingua che consente di scrivere app metropolitane che funzionano su Windows 8 in una lingua gestita. Le modifiche pesanti includono le classi mobili da un assembly all'altro, consentendo la distribuzione su un telefono o un ardesia di essere modesto. Il file App.exe.config aggiunto al tuo progetto garantisce che il tuo utente abbia la versione richiesta. Distribuzione del file .config è facoltativo, ma l'utente vedrà un messaggio di eccezione piuttosto opaco quando ha installato .net 4.0. Non è sicuro di cosa sembra. L'installazione automatica che è attivata quando non ha 4,5 probabilmente non funziona anche.

Altri suggerimenti

Mentre Hans Passant è corretto in tutto ciò che dice che manca un punto chiave che è il ruolo dell'intestazione PE in questa debacle.

Poiché DotNet 4.5 è un'installazione in-posto sopra la parte superiore di DotNet 4.0, e poiché non aggiorna il numero di versione Dotnet, il risultato è che i binari integrati utilizzando DotNet 4.5 hanno il vecchio numero di versione Dotnet 4.0 nel loro binario Intestazione PE (4.0.30319).

Poiché il CLR utilizza questo valore nell'intestazione PE per determinare quale versione del Dotnet Framework da caricare e poiché questo valore non cambia per i gruppi costruiti contro DotNet 4.5, quindi in assenza di ulteriori informazioni il CLR ha Nessun modo di sapere se un Assembly con 4.0.30319 nell'intestazione PE richiede il collegamento a DotNet 4.0 o 4.5.

È la presenza dell'elemento supportatoRuntime in App.Config che fornisce queste informazioni extra al CLR. Quindi, se si avvia un'applicazione DotNet 4.5 con la voce SupportedRuntime presente su un sistema che ha installato DotNet 4.0, quindi il CLR riparverà un messaggio utile informandoti che non hai la versione richiesta di Dotnet installata. Considerando che si avvia la stessa applicazione DotNet 4.5 senza la voce supportataRuntMuntime su un sistema che ha installato DotNet 4.0, quindi l'applicazione potrebbe iniziare a funzionare, ma quindi schiantare quando si verifica successivamente di utilizzare un Dotnet 4.5 caratteristica.

Mentre i progetti integrati utilizzando VS2012 RC e targeting DOTNet 4.5 potrebbero aver avuto la voce di supporto mancante, i progetti integrati utilizzando VS2012 RTM hanno la voce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top