Domanda

Ho scritto una libreria di classi in .NET 2.0 per l'accesso al database circa 2 anni fa e sono state usando tutto il tempo in .NET 2.0, 3.0 e 3.5.

Nel progetto attuale a cui sto lavorando (che è un'applicazione .NET 4.0), provato ad utilizzare la vecchia libreria di classi fedele e ho ottenuto la seguente eccezione:


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: 

Cosa potrebbe esserci di sbagliato e come posso risolvere il problema?

È stato utile?

Soluzione

Il meglio sarebbe probabilmente ricompilare la libreria di classi per .NET 4.0 in Visual Studio 2010 (vale a dire. Aprire il progetto, convertirlo, e modificando il framework di destinazione.)

Se non si può, o non vuole, fare questo, allora si può provare ad aggiungere il seguente al file app.config per il NET 4.0 applicazione:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
</startup>

es.

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

Altri suggerimenti

Dal momento che il montaggio è in modalità mista, è potenzialmente in grado di chiamare il codice gestito dal codice macchina non gestito nell'assieme. Con il nuovo side-by-side CLR supporto versione in-process in .NET 4.0, il runtime non sa quale versione CLR deve essere fornita quando ciò accade. Devi dirgli che con un file App.exe.config che dovrebbe assomigliare a questo:

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

Un altro modo: In VB 2010 Express è possibile aprire il progetto e andare alla scheda Compila e Advanced Compile Options... poi. Selezionare .NET Framework 2.0 dalla lista denominata Target framework (all configurations) discesa.

Se non si ottiene attraverso anche specificando useLegacyV2RuntimeActivationPolicy = "true", potrebbe essere necessario installare una configurazione che è compatibile con il sistema operativo e la versione di .NET. È possibile trovare lo stesso a http: // sistema. data.sqlite.org/index.html/doc/trunk/www/downloads.wiki .

Prima di installare questa configurazione, SQLite disinstallazione dei programmi installati. Questo mostrerà gli errori nel codice.

Se non funziona anche dopo l'installazione di installazione compatibile, è necessario rimuovere il riferimento al file DLL precedente e aggiungere un nuovo riferimento a questo file DLL compatibili.

Quando si aggiunge un riferimento a un file DLL compatibile non resta che costruire il vostro progetto e tutti i tuoi errori di codice dovrebbero sono andati.

Si potrebbe provare ad aprire il vecchio progetto fedele (Class Library) all'interno di Visual Studio 2010 e permettono di fare la conversione per voi.

Se qualcun altro ancora gestito in questo problema, qui è la mia diagnosi: Si utilizza SQLite pacchetto sbagliato. Ci sono molte versioni di SQLite sotto http: // sistema .data.sqlite.org / index.html / doc / trunk / www / downloads.wiki

Per esempio, se si prendono di mira .NET 4.5 con platorm x86 si dovrebbe utilizzare questo file:

sotto Precompiled collegata in modo statico binari per Windows a 32 bit (.NET Framework 4.5)

sqlite-netFx45-static-binary-bundle-Win32-2012-1.0.106.0.zip

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top