conjunto de modo mixto en .NET 4
-
02-10-2019 - |
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?
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