Ich habe ein Projekt, in dem ich einige der .NET 4.0-Funktionen verwenden möchte, aber eine Kernanforderung ist, dass ich das System.Data.SQLite-Framework verwenden kann, die gegen 2.X kompiliert wird. Ich sehe Erwähnung dieses möglich ist, wie die akzeptierte Antwort hier, aber ich sehe nicht, wie dies tatsächlich zu erreichen.
Wenn ich versuche, mein 4.0-Projekt auszuführen und dabei auf die 2.X-Assembly verweise, erhalte ich:
*Mixed mode assembly is built against version 'v2.0.50727' of the runtime
und kann nicht in die 4.0-Laufzeitumgebung geladen werden, ohne zusätzliche Konfigurationsinformationen geladen werden.*
Welche "zusätzliche Konfiguration" ist erforderlich?
Um eine CLR 2.0 Mixed Mode Assembly zu verwenden, müssen Sie Ihre App.Config-Datei so ändern, dass sie Folgendes enthält:
<?xml version="1.0"?>
useLegacyV2RuntimeActivationPolicy="true">
Der Schlüssel ist das useLegacyV2RuntimeActivationPolicy
-Flag. Dies veranlasst die CLR, die neueste Version (4.0) zu verwenden, um Ihre Mixed-Mode-Assembly zu laden. Ohne dieses Flag wird es nicht funktionieren.
Beachten Sie, dass dies nur für Mixed-Mode-Assemblies (C++/CLI) von Bedeutung ist. Sie können alle verwalteten CLR 2-Assemblies laden, ohne dies in app.config
anzugeben.
Dieser Forumsbeitrag im .NET Framework Developer Center. Er könnte einige Einblicke bieten.
(Zur Konfigurationsdatei der Anwendung hinzufügen.)
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Je nachdem, auf welche Version des Frameworks Sie abzielen, sollten Sie hier nachsehen, um den richtigen String zu erhalten:
http://msdn.microsoft.com/en-us/library/ee517334.aspx
Ich habe Stunden damit verschwendet, herauszufinden, warum meine Version für den .Net 4.0 Client die Vollversion benötigt. Am Ende habe ich dies verwendet:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"
sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>