No se pudo cargar el archivo o ensamblado ‘System.Data.SQLite’

Instalé ELMAH 1.1 .Net 3.5 x64 en mi proyecto ASP.NET y ahora recibo este error (cada vez que bash ver una página):

No se pudo cargar el archivo o ensamblado ‘System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139’ o una de sus dependencias. Se intentó cargar un progtwig con un formato incorrecto.

Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la stack para obtener más información sobre el error y dónde se originó en el código.

Detalles de la excepción: System.BadImageFormatException: no se pudo cargar el archivo o ensamblado ‘System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139’ o una de sus dependencias. Se intentó cargar un progtwig con un formato incorrecto.

Más detalles de error en la parte inferior.

Mi plataforma de solución activa es “Cualquier CPU” y estoy ejecutando en un x64 Windows 7 en un procesador x64, por supuesto. La razón por la que estamos usando esta versión de ELMAH es porque 1.0 .Net 3.5 (x86, que es la única plataforma para la que está comstackda) nos dio el mismo error en nuestro servidor Windows x64.

Intenté comstackr para x86 y x64 y recibí el mismo error. Intenté eliminar todos los resultados del comstackdor (bin y obj). Finalmente, hice una referencia al dll de SQLite directamente, algo que no era necesario para que el proyecto funcionara en el servidor y tengo este error de comstackción:

Error 1 Advertencia como error: generación de ensamblaje: el ensamblado al que se hace referencia ‘System.Data.SQLite.dll’ se dirige a un procesador diferente MyProject

¿Alguna idea de por qué podría ser el problema?

Más detalles de error:

Error de fuente:

Se generó una excepción no controlada durante la ejecución de la solicitud web actual. La información sobre el origen y la ubicación de la excepción se puede identificar utilizando el seguimiento de stack de excepción a continuación.

Stack Trace:

[BadImageFormatException: no se pudo cargar el archivo o ensamblado ‘System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139’ o una de sus dependencias. Se intentó cargar un progtwig con un formato incorrecto.]
System.Reflection.Assembly._nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark y stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
System.Reflection.Assembly.nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark y stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +43
System.Reflection.Assembly.InternalLoad (AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark & ​​stackMark, Boolean forIntrospection) +127 System.Reflection.Assembly.InternalLoad (String assemblyString, Evidence assemblySecurity, StackCrawlMark & ​​stackMark, Boolean forIntrospection) +142 System.Reflection.Assembly. Load (String assemblyString) +28
System.Web.Configuration.ComstacktionSection.LoadAssemblyHelper (String assemblyName, Boolean starDirective) +46

[ConfigurationErrorsException: no se pudo cargar el archivo o ensamblado ‘System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139’ o una de sus dependencias. Se intentó cargar un progtwig con un formato incorrecto.]
System.Web.Configuration.ComstacktionSection.LoadAssemblyHelper (String assemblyName, Boolean starDirective) +613 System.Web.Configuration.ComstacktionSection.LoadAllAssembliesFromAppDomainBinDirectory () +203 System.Web.Configuration.ComstacktionSection.LoadAssembly (AssemblyInfo ai) +105
System.Web.Comstacktion.BuildManager.GetReferencedAssemblies (ComstacktionSection compConfig) +178
System.Web.Comstacktion.BuildProvidersCompiler..ctor (VirtualPath configPath, Boolean supportLocalization, String outputAssemblyName) +54
System.Web.Comstacktion.ApplicationBuildProvider.GetGlobalAsaxBuildResult (Boolean isPrecompiledApp) +232
System.Web.Comstacktion.BuildManager.CompileGlobalAsax () +52 System.Web.Comstacktion.BuildManager.EnsureTopLevelFilesCompiled () +337

[HttpException (0x80004005): no se pudo cargar el archivo o ensamblado ‘System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139’ o una de sus dependencias. Se intentó cargar un progtwig con un formato incorrecto.]
System.Web.Comstacktion.BuildManager.ReportTopLevelComstacktionException () +58 System.Web.Comstacktion.BuildManager.EnsureTopLevelFilesCompiled () +512 System.Web.Hosting.HostingEnvironment.Initialize (ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters) +729

[HttpException (0x80004005): no se pudo cargar el archivo o ensamblado ‘System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139’ o una de sus dependencias. Se intentó cargar un progtwig con un formato incorrecto.]
System.Web.HttpRuntime.FirstRequestInit (HttpContext context) +8896783
System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext context) +85
System.Web.HttpRuntime.ProcessRequestInternal (HttpWorkerRequest wr) +259

System.Data.SQLite.dll es un ensamblado mixto, es decir, contiene tanto código administrado como código nativo. Por lo tanto, un System.Data.SQLite.dll particular es x86 o x64, pero nunca ambos.

Actualización ( cortesía de J. Pablo Fernández ): Cassini, el servidor web de desarrollo utilizado por Visual Studio cuando presiona F5 o hace clic en el botón verde “play”, es x86 solamente, lo que significa que incluso si su estación de trabajo es x64, solo estará capaz de usar la versión x86 de System.Data.SQLite.dll.

Una alternativa es no utilizar Cassini, sino IIS7, que es propiamente x64.

Asegúrese de que “Habilitar aplicaciones de 32 bits” esté configurado en falso para el grupo de aplicaciones.

Vaya al grupo de IIS7 Application Pool -> advanced settings and set the 32-bit application to true .

Esto es muy simple si no está usando SQLite:

Puede eliminar las DLL de SQLite de las carpetas bin de su solución, y luego desde la carpeta donde hace referencia a ELMAH. Reconstruya y su aplicación no intentará cargar esta DLL que no esté usando.

Tengo una máquina de desarrollo de 64 bits y un servidor de comstackción de 32 bits. Usé este código antes de la inicialización de NHibernate. Funciona con encanto en cualquier architecture (bueno, las 2 que he probado)

Espero que esto ayude a alguien.

Guido

  private static void LoadSQLLiteAssembly() { Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase); FileInfo fi = new FileInfo(dir.AbsolutePath); string binFile = fi.Directory.FullName + "\\System.Data.SQLite.DLL"; if (!File.Exists(binFile)) File.Copy(GetAppropriateSQLLiteAssembly(), binFile, false); } private static string GetAppropriateSQLLiteAssembly() { string pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); string arch = ((String.IsNullOrEmpty(pa) || String.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64"); return GetLibsDir() + "\\NUnit\\System.Data.SQLite.x" + arch + ".DLL"; } 

Como alguien que tuvo que lidiar con bastantes informes de errores en Roadkill Wiki con exactamente el mismo problema, esto es lo que debes hacer:

  • ¿Estás usando x64 o x86? Sqlite viene con DLL para architectures separadas: copie la correcta en su carpeta bin, hay dos DLLS para el proveedor oficial: System.Data.SQLite.dll System.Data.SQLite.Linq.dll
  • Si no puede molestarse en buscar estos ensamblajes, habilite el modo de 32 bits para su grupo de aplicaciones (una solución para las máquinas de desarrollo solo usualmente)
  • Si está alojado en un servidor, necesitará la redistribución de Microsoft C ++ Runtime, no está instalado en Server 2008 R2 de manera predeterminada. versión x64 , versión x86

Es un verdadero dolor en el culo cuántos obstáculos tienes que saltar al redistribuir los binarios SQLite .NET, mi solución para Roadkill al final fue copiar los binarios correctos en la carpeta ~ / bin en función de la architecture que usas . Lamentablemente, eso no resuelve el problema del tiempo de ejecución de C ++.

El ensamblado System.Data.SQLite relacionado con la carga manual puede resolver esto.

Cambió el código de gatapia como se muestra a continuación:

  public static void LoadSQLLiteAssembly() { Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase); FileInfo fi = new FileInfo(dir.AbsolutePath); string appropriateFile = Path.Combine(fi.Directory.FullName, GetAppropriateSQLLiteAssembly()); Assembly.LoadFrom(appropriateFile); } private static string GetAppropriateSQLLiteAssembly() { string pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); string arch = ((String.IsNullOrEmpty(pa) || String.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64"); return "System.Data.SQLite.x" + arch + ".DLL"; } 

Obtuve este error cuando nuestro servidor de Windows se convirtió de 32 bit OS a 64 bit. El ensamblado que arrojaba el error se configuró para comstackrse en modo x86 (es decir, modo 32). Lo cambié a “Cualquier CPU” y eso funcionó. Puede cambiar este valor haciendo lo siguiente:

Haga clic derecho en el proyecto vaya a Properties -> Build -> Platform Target -> change to "Any CPU"

En nuestro caso no funcionó porque nuestro servidor de producción no tiene

Paquete redistribuible de Microsoft Visual C ++ 2010 SP1 (x86)

Lo instalamos y todo funciona bien. El grupo de aplicaciones debe tener habilitadas las aplicaciones de 32 bits configuradas como verdaderas y debe tener la versión x86 de la biblioteca.

Resolví esto instalando System.Data.SQLite con la extensión Nuget. Esta extensión puede usarse para Visual Studio 2010 o superior. Primero, debes instalar la extensión Nuget. Puedes seguir aquí:

  • Vaya a Visual Studio 2010, Menú -> Herramientas
  • Seleccionar Extension Manager
  • Ingrese NuGet en el cuadro de búsqueda y haga clic en Galería en línea. Esperando Recuperar información …
  • Seleccione el Administrador de paquetes NuGet recuperado, haga clic en Descargar. Esperando Descargar …
  • Haga clic en Instalar en el instalador de extensiones de Visual Studio Administrador de paquetes NuGet. Espere a que se complete la instalación.
  • Haga clic en Cerrar y ‘Reiniciar ahora.

En segundo lugar, ahora puede instalar SQLite:

  • Vaya al menú HERRAMIENTAS-> Library Package Manager-> Package Manager Console del Visual Studio.
  • A continuación, ejecute el comando Install-Package System.Data.SQLite en la consola del Administrador de paquetes. De esta manera: ejecute el comando Install-Package System.Data.SQLite en la consola del Administrador de paquetes

Y ahora, puedes usar System.Data.SQLite.

En el caso, verá dos carpetas x64 y, x86, estas carpetas contienen SQLite.Interop.dll. Ahora ve a la ventana de propiedades de esos archivos dlls y establece que la acción de comstackción es contenido y Copiar al directorio de salida es Copiar siempre.

Entonces, ese es mi camino.

Gracias. Kim Tho Pham, Ho Chi Minh City, Vietnam. Correo electrónico: tho.phamkim@gmail.com

Resolví esto, por extraño que parezca, instalando System.Data.SQLite a través de la aplicación Nuget GUI, a diferencia de la consola del administrador de paquetes.

La instalación a través de la consola no incluía las dependencias que necesita esta biblioteca para ejecutarse.

Vine con 2 soluciones rápidas. O trabaja para mi Creo que el problema es debido a los permisos.

1) En lugar de usar el archivo Elmah.dll del directorio net-2.0, utilicé Elmah.dll desde net-1.1.

2) En lugar de mantener Elmah.dll en el directorio bin del proyecto. Hago un directorio dll para ponerlo.

Otra forma de evitar esto es actualizar su aplicación a ELMAH 1.2 en lugar de 1.1.

System.Data.SQLite tiene una dependencia en System.Data.SQLite.interop para asegurarse de que ambos paquetes tengan la misma versión y sean ambos x86 .

Esta es una vieja pregunta, pero intenté todo lo anterior. Estaba trabajando en un proyecto estrictamente x86 , por lo que no había dos carpetas / x86, / x64. Pero por alguna razón, el System.Data.SQLite era una versión diferente de System.Data.SQLite.interop , una vez que reduje los dlls correspondientes el problema se solucionó.

¿Puedes eliminar tu carpeta de depuración de la bandeja y volver a comstackr?

O consulte la referencia de su proyecto en System.Data.SQLite , System.Data.SQLite dónde se encuentra y luego abra el dll en el reflector. Si no puede abrirlo, eso significa que el dll está dañado, es posible que desee encontrar uno correcto o reinstalar el .NET Framework.

Si está utilizando IIS Express como servidor web en su máquina de desarrollo, cambiaría a Local IIS. Esto funcionó para mí.

Esta es una publicación anterior, pero puede ayudar a algunas personas que buscan en este error intentar configurar “Activar aplicaciones de 32 bits” en True para el grupo de aplicaciones. Eso es lo que resolvió el error para mí. Encontré esta solución leyendo algunos comentarios a la respuesta de @ beckelmw.

Es probable que tenga el paquete equivocado instalado. Desea el paquete producido por Microsoft que implementa el modelo de proveedor System.Data.Common.