Pregunta

Me escribió una biblioteca de clases de .NET 2.0 para el acceso de base de datos hace unos 2 años y han estado usando todo el tiempo en .NET 2.0, 3.0 y 3.5.

En el proyecto actual que estoy trabajando en (que es una aplicación .NET 4.0), intentado usar la biblioteca de clases fiel viejo y me dio la siguiente excepción:


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: 

¿Qué podría estar mal y cómo puedo solucionarlo?

¿Fue útil?

Solución

La mejor probablemente sería volver a compilar la biblioteca de clases de .NET 4.0 en Visual Studio 2010 (es decir. La apertura del proyecto, su conversión, y cambiar el marco de destino.)

Si no puede, o no quiere, hacer eso, entonces puede intentar añadir lo siguiente a su archivo app.config para su aplicación .NET 4.0:

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

ie.

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

Otros consejos

Debido a que su montaje es en modo mixto, que potencialmente puede llamar a código administrado desde el código de la máquina no administrado en el montaje. Con la nueva versión de apoyo durante el proceso de lado a lado en CLR .NET 4.0, el tiempo de ejecución no sabe qué versión CLR debe ser proporcionada cuando esto sucede. Tienes que decirle que con un archivo app.exe.config que debería tener este aspecto:

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

Otra forma: En VB 2010 Express se puede abrir el proyecto e ir a la ficha compilar y Advanced Compile Options... a continuación. Seleccionar de la lista .NET Framework 2.0 Target framework (all configurations) llamado-menú desplegable.

Si usted no está recibiendo a través incluso especificando useLegacyV2RuntimeActivationPolicy = "true", es posible que tenga que instalar una configuración que es compatible con su sistema operativo y versión de .NET. Usted puede encontrar el mismo en http: // sistema. data.sqlite.org/index.html/doc/trunk/www/downloads.wiki .

Antes de instalar esta configuración, SQLite desinstalación de programas instalados. Eso va a mostrar errores en el código.

Si no está trabajando, incluso después de la instalación de configuración compatibles, usted tiene que quitar la referencia al archivo DLL anterior y añadir una nueva referencia a este archivo DLL compatibles.

Cuando se agrega una referencia a un archivo DLL compatibles sólo hay que construir su proyecto y todos sus errores de código debería haber ido.

Se podría tratar de abrir el viejo y fiel proyecto (Biblioteca de clases) dentro de Visual Studio 2010 y permitir que se haga la conversión para usted.

Si alguien todavía se encuentra con este problema, aquí está mi diagnóstico: Está utilizando el paquete SQLite mal. // sistema: Hay muchas versiones de SQLite bajo http .data.sqlite.org / index.html / doc / trunk / www / downloads.wiki

Por ejemplo, si se dirigen a .NET 4.5 con platorm x86 debe utilizar este archivo:

bajo precompilado estáticamente-Linked binarios para Windows de 32 bits (.NET Framework 4.5)

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top