2010-04-15 9 views
24

Esistono barriere di compatibilità con un codice di chiamata di assembly .NET 4.0 in un assembly .NET 2.0? E viceversa?Il codice .NET 4.0 può interagire con il codice .NET 2.0?

In particolare, sto esaminando un aggiornamento a Visual Studio 2010 quando si utilizza un'applicazione di terze parti basata su .NET 2.0. L'applicazione è estensibile da hook che fanno riferimento al mio codice personalizzato. E viceversa, il mio codice farà riferimento agli assembly dell'applicazione.

+1

Dai un'occhiata a [questa domanda] (http://stackoverflow.com/questions/1456785/a-definite-guide-to-api-breaking-changes-in-net). –

risposta

38

CLR, in .NET 4, può utilizzare .NET 2 assembly e usarli correttamente.

Se si desidera che l'applicazione .NET 2 sia in grado di caricare gli assembly .NET 4., sarà necessario configurarlo in modo diverso. Impostando il requiredRuntime su .NET 4 e il criterio di caricamento legacy, dovresti essere in grado di forzare il caricamento dell'applicazione .NET 2 utilizzando CLR 4, che consentirà l'utilizzo degli assembly .NET 4.

Imposta il file app.config per includere:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

Detto questo, in una situazione come questa, mi consiglia semplicemente utilizzando VS 2010 e .NET 3.5 rivolte invece di .NET 4. Questo compilerebbe i vostri assembly per CLR 2 ed eviterà completamente questo problema.

+0

Ciò presuppone, naturalmente, che su qualsiasi server su cui si sta eseguendo l'applicazione .NET 2.0 sia installato anche .NET 4.0. – cortijon

+2

@MrGrumbe: Penso che sia un'ipotesi sicura considerando la domanda dell'OP. –

-3

Gli assembly .NET 4.0 possono chiamare assembly .NET 2.0 senza difficoltà. Tuttavia, è altamente improbabile che tu possa chiamare un assembly .NET 4.0 da .NET 2.0, a meno che l'assembly .NET 4.0 non sfrutti nuove funzionalità di framework e tu abbia configurato i reindirizzamenti dell'assembly.

+0

... si sta ricevendo un warnig in vs se si sta tentando di eseguire questa operazione e potrebbe verificarsi un comportamento imprevisto. – Beachwalker

Problemi correlati