.net .net-4.0 mixed-mode

Montaje en modo mixto en.NET 4



.net-4.0 mixed-mode (6)

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í:

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

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 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 lo soluciono?


Lo mejor sería recompilar 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:

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

es decir.

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


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


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 objetivo .net 4.5 con x86 Platorm, debe usar este archivo:

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

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


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 programas 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.