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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top