2013-04-18 10 views
6

Il mio progetto si rivolge a .NET 4.5. Non utilizza nuovi metodi 4.5, quindi funziona correttamente sulla macchina con solo .NET 4.0 installato.È possibile creare un'applicazione con .NET 4.5 su .NET 4.0?

Questo va bene fino a quando non ho aggiunto alcuni metodi di estensione e riflessione. Quindi, quando ho eseguito questo programma .NET 4.5 sul computer 4.0, non è riuscito con "System.TypeLoadException: Impossibile caricare il tipo 'System.Runtime.CompilerServices.ExtensionAttribute' dall'assembly mscorlib". Il famoso programma ExtensionAttribute che è stato ben documentato here.

Un altro modo rapido per testare questo è aggiungere la seguente riga. Quindi il programma genererà l'eccezione durante l'esecuzione solo su .NET 4.0.

Console.WriteLine(typeof(System.Runtime.CompilerServices.ExtensionAttribute).Assembly.FullName); 

Mi chiedo se c'è un modo per aggirare il problema. Ad esempio, ILMerge (quando si utilizza l'opzione corretta/targetplatform come documentato nel collegamento) modifica effettivamente ExtensionAttribute da mscorlib a System.Core se il progetto è destinato a .NET 4.0 (con 4.5 installato). Ma non sembra funzionare sul progetto mirato a .NET 4.5.

So che questo è un campo lungo. Ma voglio solo vedere se qualcuno ha altre idee dal momento che era così vicino.

Grazie.

risposta

14

In generale, questo non funzionerà. Funziona in alcuni casi poiché 4.5 è un sostituto sostitutivo per 4.0, ma non funzionerà in generale. Ho, personalmente, visto problemi con tipi che sono stati spostati in diversi assembly e i binding non sono stati impostati correttamente, proprio come stai vedendo. I tipi di riflessione non sono gli unici tipi che sono stati spostati in 4.5.

Il mio progetto è destinato a .NET 4.5. Non utilizza nuovi metodi 4.5, quindi funziona correttamente sulla macchina con solo .NET 4.0 installato.

Se questo è il caso, è sufficiente modificare l'applicazione su .NET 4.0 di destinazione. Questo dovrebbe consentire di funzionare in modo sicuro su una macchina con solo .NET 4 installato.

+0

Sfortunatamente il mio progetto fa riferimento anche ad altri progetti comuni destinati a .NET 4.5. Quindi VS2012 non mi permetterà di cambiare il mio progetto in 4.0 (a meno che non ci sia un modo per ingannare VS2012?). – Hengyi

+2

@Ian Dovresti scegliere come target 4.5 e distribuire 4.5 o modificare tali progetti. Se hanno come target 4.5, probabilmente useranno nuove funzionalità, quindi avrai bisogno di 4.5 ... –

Problemi correlati