Montaje en modo mixto en .NET 4

Escribí una biblioteca de clases en .NET 2.0 para el acceso a bases de datos hace unos dos años y lo he estado usando todo el tiempo en .NET 2.0, 3.0 y 3.5.

En el proyecto actual en el que estoy trabajando (que es una aplicación .NET 4.0), intenté usar la antigua biblioteca de clases fieles y obtuve la siguiente excepción:


 System.InvalidOperationException no se ha manejado Message = Se ha producido un error al crear el formulario.  Ver Exception.InnerException para más detalles.  El error es: El ensamblaje en modo mixto se comstack con la versión 'v2.0.50727' del tiempo de ejecución y no se puede cargar en el tiempo de ejecución 4.0 sin información de configuración adicional.  Fuente = SchoolManager StackTrace: en SchoolManager.My.MyProject.MyForms.Create__Instance __ [T] (T Instance) en 17d14f5c-a337-4978-8281-53493378c1071.vb: línea 190 en SchoolManager.My.MyProject.MyForms.get_frmGeneric () en SchoolManager.My.MyApplication.OnCreateMainForm () en D: \ Alex \ Documents \ Visual Studio 2008 \ Projects \ School Manager \ SchoolManager \ My Project \ Application.Designer.vb: línea 35 en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun ( ) en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel () en Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run (String [] commandLine) en SchoolManager.My.MyApplication.Main (String [] Args) en 17d14f5c-a337-4978- 8281-53493378c1071.vb: línea 81 en System.AppDomain._nExecuteAssembly (ensamblado RuntimeAssembly, String [] args) en System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args) en Microsoft.VisualStudio.HostingProcess.HostProc. RunUs  ersAssembly () en System.Threading.ThreadHelper.ThreadStart_Context (Object state) en System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) en System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback callback , Estado del objeto) en System.Threading.ThreadHelper.ThreadStart () InnerException: System.IO.FileLoadException Message = El ensamblado de modo mixto se genera con la versión 'v2.0.50727' del tiempo de ejecución y no se puede cargar en el tiempo de ejecución 4.0 sin información de configuración adicional .  Fuente = Dinofage.Data.XpressData StackTrace: en Dinofage.Data.XpressData.ExecuteSelectInternal (String selectCommand) en Dinofage.Data.XpressData.ExecuteSelect (String selectCommand) en SchoolManager.Academics.GetNewAdmissionCode (String academicYear) en D: \ Alex \ Documents \ Visual Studio 2008 \ Projects \ School Manager \ SchoolManager \ Modules \ Academics.vb: línea 89 en SchoolManager.StudentDetail..ctor () en D: \ Alex \ Documents \ Visual Studio 2008 \ Projects \ School Manager \ SchoolManager \ UserControls \ StudentDetail.vb: línea 20 en SchoolManager.frmGeneric.InitializeComponent () en D: \ Alex \ Documents \ Visual Studio 2008 \ Projects \ School Manager \ SchoolManager \ frmGeneric.Designer.vb: línea 25 en SchoolManager.frmGeneric..ctor () InnerException: 

¿Qué podría estar mal y cómo lo soluciono?

Lo mejor sería recomstackr la biblioteca de su clase para .NET 4.0 en Visual Studio 2010 (es decir, abrir el proyecto, convertirlo y cambiar el marco de destino).

Si no puedes, o no harás eso, puedes intentar agregar lo siguiente a tu archivo app.config para tu aplicación .NET 4.0:

    

es decir.

       

Como su ensamblaje es de modo mixto, es posible que llame al código administrado desde el código de máquina no administrado en el ensamblaje. Con el nuevo soporte de versión CLR codo a codo en proceso en .NET 4.0, el tiempo de ejecución no sabe qué versión CLR necesita proporcionarse cuando eso sucede. Tienes que decirlo con un archivo app.exe.config que debería verse así:

      

Otra forma: en VB 2010 Express puede abrir su proyecto y acceder a la pestaña Comstackr y luego Advanced Compile Options... Seleccione .NET Framework 2.0 en la lista desplegable denominada Target framework (all configurations) .

Si no está llegando incluso al especificar useLegacyV2RuntimeActivationPolicy = “true”, es posible que deba instalar una configuración que sea compatible con su sistema operativo y su versión .NET. Puede encontrar lo mismo en http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki .

Antes de instalar esta configuración, desinstale SQLite de los progtwigs instalados. Eso mostrará errores en tu código.

Si no funciona incluso después de instalar la configuración compatible, debe eliminar la referencia a su archivo DLL anterior y agregar una nueva referencia a este archivo DLL compatible.

Cuando agrega una referencia a un archivo DLL compatible, solo tiene que crear su proyecto y todos los errores de código deberían haber desaparecido.

Podría intentar abrir el viejo proyecto fiel (Biblioteca de clases) dentro de Visual Studio 2010 y permitirle hacer la conversión por usted.

Si alguien más todavía se encuentra con este problema, aquí está mi diagnóstico: está usando un paquete SQLite erróneo. Hay muchas versiones de SQLite en http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Por ejemplo, si tiene como objective .net 4.5 con x86 Platorm, debe usar este archivo:

en Binarios Precomstackdos Estáticamente Vinculados para Windows de 32 bits (.NET Framework 4.5)

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