Mischmodus-Montage in 4 .NET
-
02-10-2019 - |
Frage
ich eine Klassenbibliothek in .NET 2.0 für den Datenbankzugriff vor etwa 2 Jahren geschrieben und haben sie alle zusammen auf .NET 2.0, 3.0 und 3.5 verwendet wird.
Im aktuellen Projekt arbeite ich (das ist eine .NET 4.0-Anwendung ist), versuchte, die alte treue Klassenbibliothek verwenden, und ich bekam die folgende Ausnahme:
System.InvalidOperationException was unhandled Message=An error occurred creating the form. See Exception.InnerException for details. The error is: Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information. Source=SchoolManager StackTrace: at SchoolManager.My.MyProject.MyForms.Create__Instance__[T](T Instance) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 190 at SchoolManager.My.MyProject.MyForms.get_frmGeneric() at SchoolManager.My.MyApplication.OnCreateMainForm() in D:\Alex\Documents\Visual Studio 2008\Projects\School Manager\SchoolManager\My Project\Application.Designer.vb:line 35 at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) at SchoolManager.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException: System.IO.FileLoadException Message=Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information. Source=Dinofage.Data.XpressData StackTrace: at Dinofage.Data.XpressData.ExecuteSelectInternal(String selectCommand) at Dinofage.Data.XpressData.ExecuteSelect(String selectCommand) at SchoolManager.Academics.GetNewAdmissionCode(String academicYear) in D:\Alex\Documents\Visual Studio 2008\Projects\School Manager\SchoolManager\Modules\Academics.vb:line 89 at SchoolManager.StudentDetail..ctor() in D:\Alex\Documents\Visual Studio 2008\Projects\School Manager\SchoolManager\UserControls\StudentDetail.vb:line 20 at SchoolManager.frmGeneric.InitializeComponent() in D:\Alex\Documents\Visual Studio 2008\Projects\School Manager\SchoolManager\frmGeneric.Designer.vb:line 25 at SchoolManager.frmGeneric..ctor() InnerException:
Was könnte falsch sein und wie kann ich das Problem beheben?
Lösung
Das Beste wäre wahrscheinlich Ihre Klassenbibliothek neu kompilieren für .NET 4.0 in Visual Studio 2010 (dh. Das Projekt eröffnet, deren Umwandlung und Ändern des Zielrahmens.)
Wenn Sie nicht können, oder wird das nicht tun, dann können Sie versuchen, die folgenden auf Ihre app.config-Datei für Ihre .NET 4.0-Anwendung hinzufügen:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
dh.
<?xml version ="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Andere Tipps
Da die Assembly im gemischten Modus ist, möglicherweise kann es bei der Montage verwalteten Code aus dem nicht verwalteten Maschinencode nennen. Mit der neuen In-Prozess-Side-by-Side-CLR-Version Unterstützung in .NET 4.0, die Laufzeit nicht weiß, welche CLR-Version zur Verfügung gestellt werden muss, wenn das passiert. Sie haben es zu sagen, dass mit einer app.exe.config Datei, die wie folgt aussehen:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Eine andere Art und Weise: In VB 2010 Express Sie Ihr Projekt öffnen und auf die Registerkarte gehen Compile und dann Advanced Compile Options...
. Wählen .NET Framework 2.0
aus der Dropdown-Liste mit dem Namen Target framework (all configurations)
.
Wenn Sie nicht einmal durch useLegacyV2RuntimeActivationPolicy Angabe Durchkommen = „true“, müssen Sie ein Setup installieren, die mit Ihrem Betriebssystem und .NET-Version kompatibel ist. Sie können das gleiche finden Sie unter http: // System. data.sqlite.org/index.html/doc/trunk/www/downloads.wiki .
Vor diesem Setup deinstallieren SQLite von installierten Programme zu installieren. Das wird Fehler im Code zeigen.
Wenn es nicht funktioniert, selbst nachdem kompatibel Setup installieren, müssen Sie den Verweis auf Ihre vorherige DLL-Datei entfernen und einen neuen Verweis auf diese kompatible DLL-Datei.
Wenn Sie einen Verweis auf eine kompatible DLL-Datei hinzufügen, müssen Sie nur Ihr Projekt erstellen und alle Ihre Codefehler gehen sollen.
Sie könnten versuchen, das alte treue Projekt (Klassenbibliothek) innerhalb von Visual Studio 2010 und erlauben das Öffnen die Konvertierung für Sie zu tun.
Wenn jemand anderes noch in diesem Thema laufen, hier ist meine Diagnose: Sie verwenden falsche SQLite-Paket. Es gibt viele Versionen von SQLite unter http: // System .data.sqlite.org / index.html / doc / trunk / www / downloads.wiki
Zum Beispiel, wenn Sie .net 4.5 mit x86 platorm zielen sollten Sie diese Datei:
unter Precompiled statisch gelinkte Binaries für 32-Bit-Windows (.NET Framework 4.5)
sqlite-netFx45-static-binary-bundle-Win32-2012-1.0.106.0.zip