2010-04-15 26 views
24

Gibt es Kompatibilitätsbarrieren mit einer .NET 4.0-Assembly, die Code in einer .NET 2.0-Assembly aufruft? Und umgekehrt?Kann .NET 4.0-Code mit .NET 2.0-Code zusammenarbeiten?

Genauer, ich untersuche ein Upgrade auf Visual Studio 2010, wenn Sie eine Anwendung von Drittanbietern basierend auf .NET 2.0 verwenden. Die Anwendung ist erweiterbar durch Hooks, die auf meinen benutzerdefinierten Code verweisen. Und umgekehrt verweist mein Code auf die Assemblys der Anwendung.

+1

Werfen Sie einen Blick auf [diese Frage] (http://stackoverflow.com/questions/1456785/a-definite-guide-to-ap-breaking-changes-in-net-). –

Antwort

38

Die CLR in .NET 4 kann .NET 2-Assemblys verwenden und ordnungsgemäß verwenden.

Wenn Sie möchten, dass Ihre .NET 2-Anwendung .NET 4-Assemblys laden kann, müssen Sie sie anders konfigurieren. Wenn Sie die erforderlicheRuntime auf .NET 4 und die Legacy-Lade-Richtlinie festlegen, sollten Sie in der Lage sein, die .NET 2-Anwendung zum Laden mit CLR 4 zu zwingen, wodurch Ihre .NET 4-Assemblys verwendet werden könnten.

Richten Sie Ihre app.config-Datei aufzunehmen:

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

Das, wie dies in einer Situation gesagt, würde ich empfehlen, nur mit VS 2010 und .NET 3.5 anstelle von .NET 4. Diese Targeting würde Ihre Assemblys für CLR 2 kompilieren und dieses Problem vollständig vermeiden.

+0

Dies setzt natürlich voraus, dass auf welchem ​​Server, auf dem Sie Ihre .NET 2.0-Anwendung ausführen, auch .NET 4.0 installiert ist. – cortijon

+2

@MrGrumbe: Ich denke, das ist eine sichere Annahme in Anbetracht der Frage des OP. –

-3

.NET 4.0-Assemblys können problemlos .NET 2.0-Assemblys aufrufen. Es ist jedoch höchst unwahrscheinlich, dass Sie eine .NET 4.0-Assembly aus .NET 2.0 aufrufen können, es sei denn, die .NET 4.0-Assembly hat keine neuen Framework-Features genutzt und Sie haben Assembly-Weiterleitungen eingerichtet.

+0

... Sie erhalten eine Warnmeldung in vs, wenn Sie dies versuchen und dies zu einem unerwarteten Verhalten führen kann. – Beachwalker