He instalado ELMAH 1.1 .Net 3.5 x64 en mi proyecto ASP.NET y ahora recibo este error (cada vez que intento ver alguna 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 programa 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 pila 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 programa 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 Windows 7 x64 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á compilada) nos dio el mismo error en nuestro servidor x64 de Windows.
He intentado compilar para x86 y x64 y obtengo el mismo error. Intenté eliminar todo el compilador de salida (bin y obj). Finalmente, hice una referencia al SQLite dll directamente, algo que no era necesario para que el proyecto funcionara en el servidor y obtuve este error de compilación:
Error 1 Advertencia como error: generación de ensamblado: 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 del 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 la pila de excepciones a continuación.
Seguimiento de pila:
[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 ha intentado cargar un programa con un formato incorrecto.]
System.Reflection.Assembly._nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
System.Reflection.Assembly.Asse .nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark & 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, Boole. Load (String assemblyString) +28
System.Web.Configuration.CompilationSection.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 programa con un formato incorrecto.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String assemblyName, Boolean starDirective) +613 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory () +203 System.b3Configuration. .CompilationSection.LoadAssembly (AssemblyInfo ai) +105
System.Web.Compilation.BuildManager.GetReferencedAssemblies (CompilationSection compConfig) +178
System.Web.Compilation.BuildProvidersCompiler..ctor (VirtualPath configPath, Boolean supportLocalization, String output5454)
System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult (Boolean isPrecompiledApp) +232
System.Web.Compilation.BuildManager.CompileGlobalAsax () +52 System.Web.Compilation.BuildManager.EnsilesTopLevel ()[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 programa con un formato incorrecto.]
System.Web.Compilation.BuildManager.ReportTopLevelCompilationException () +58 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled () +512 System.Web.Hosting.HostingEnvironment.Initialize.Initialize.Initialize.Initialize.Initialize.Initialize.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 programa con un formato incorrecto.]
System.Web.HttpRuntime.FirstRequestInit (contexto HttpContext) +8896783
System.Web.HttpRuntime.EnsureFirstRequestInit (contexto HttpContext) +85
System.Web.HttpRuntime.ProcessRequestWntererHerverRequestInter ) +259
Respuestas:
System.Data.SQLite.dll
es un ensamblado mixto, es decir, contiene código administrado y código nativo. Por lo tanto, un particularSystem.Data.SQLite.dll
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 "reproducir", es solo x86, lo que significa que incluso si su estación de trabajo es x64, solo será capaz de usar la versión x86 de System.Data.SQLite.dll.
Una alternativa es no usar Cassini sino IIS7, que es correctamente x64.
fuente
Asegúrese de que "Habilitar aplicaciones de 32 bits" esté establecido en falso para el grupo de aplicaciones.
fuente
Ve al
IIS7 Application Pool -> advanced settings and set the 32-bit application to true
.fuente
Esto es muy simple si no está utilizando SQLite:
Puede eliminar las DLL de SQLite de las carpetas bin de su solución, luego de la carpeta donde hace referencia a ELMAH. Reconstruya, y su aplicación no intentará cargar esta DLL que no está utilizando.
fuente
Tengo una máquina de desarrollo de 64 bits y un servidor de compilación de 32 bits. Utilicé este código antes de la inicialización de NHibernate. Funciona a la perfección en cualquier arquitectura (bueno, las 2 que he probado)
Espero que esto ayude a alguien.
Guido
fuente
En nuestro caso no funcionó porque falta nuestro servidor de producción
Paquete redistribuible de Microsoft Visual C ++ 2010 SP1 (x86)
Lo instalamos y todo funciona bien. El grupo de aplicaciones debe tener Activar aplicaciones de 32 bits establecido en verdadero y debe tener la versión x86 de la biblioteca
fuente
Como alguien que tuvo que lidiar con bastantes informes de errores en Roadkill Wiki con exactamente el mismo problema, esto es lo que debe hacer:
System.Data.SQLite.dll
System.Data.SQLite.Linq.dll
Es una verdadera pena saber cuántos aros tienes que atravesar al redistribuir los binarios de SQLite .NET, mi solución para Roadkill al final fue copiar los binarios correctos a la carpeta ~ / bin según la arquitectura que estás usando . Desafortunadamente, eso no resuelve el problema del tiempo de ejecución de C ++.
fuente
Resolví esto instalando System.Data.SQLite con la extensión Nuget. Esta extensión se puede usar para Visual Studio 2010 o superior. Primero, debe instalar la extensión Nuget. Puedes seguir aquí:
En segundo lugar, ahora puede instalar SQLite:
Y ahora, puede usar System.Data.SQLite.
En el caso, verá dos carpetas x64 y, x86, estas carpetas contienen SQLite.Interop.dll. Ahora vaya a las ventanas de propiedades de esos dlls y configure la acción de compilación como contenido y Copiar al directorio de salida es Copiar siempre.
Entonces, ese es mi camino.
Gracias. Kim Tho Pham, Ciudad Ho Chi Minh, Vietnam. Correo electrónico: [email protected]
fuente
El ensamblaje System.Data.SQLite relacionado con la carga manual puede resolver esto.
Cambió el código de gatapia de la siguiente manera:
fuente
Recibí este error cuando nuestro servidor de Windows se convirtió del sistema operativo de 32 bits a 64 bits. El ensamblado que arrojó el error se configuró para compilar 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"
fuente
Resolví esto, por extraño que parezca, instalando System.Data.SQLite a través de la aplicación Nuget GUI, en lugar de la consola del administrador de paquetes.
La instalación a través de la consola no incluía las dependencias que esta biblioteca necesita para ejecutarse.
fuente
System.Data.SQLite
depende deSystem.Data.SQLite.interop
asegurarse de que ambos paquetes tengan la misma versión y sean ambos x86 .Esta es una vieja pregunta, pero probé 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, la
System.Data.SQLite
versión era diferenteSystem.Data.SQLite.interop
, una vez que bajé los dlls coincidentes, se solucionó el problema.fuente
Se me ocurrieron 2 soluciones rápidas. O trabajas para mí. Creo que el problema se debe a los permisos.
1) En lugar de usar el archivo Elmah.dll del directorio net-2.0, utilicé Elmah.dll de net-1.1.
2) En lugar de mantener Elmah.dll en el directorio bin del proyecto. Hago un directorio dll para ponerlo.
fuente
Otra forma de evitar esto es simplemente actualizar su aplicación a ELMAH 1.2 en lugar de 1.1.
fuente
¿Puede eliminar su carpeta de depuración bin y volver a compilar?
O verifique la referencia de su proyecto a
System.Data.SQLite
, localice dónde está ubicado, 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 marco .net.fuente
Si está utilizando IIS Express como servidor web en su máquina de desarrollo, cambiaría a IIS local. Esto funcionó para mí.
fuente
Esta es una publicación antigua, pero puede ayudar a algunas personas que buscan este error intentar configurar "Habilitar aplicaciones de 32 bits" en Verdadero 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.
fuente
Es probable que tenga instalado el paquete incorrecto. Desea el paquete producido por Microsoft que implementa el modelo de proveedor System.Data.Common.
fuente