net mvc example asp .net sqlite elmah

.net - mvc - No se pudo cargar el archivo o ensamblado ''System.Data.SQLite''



elmah github (16)

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

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.

Instalé ELMAH 1.1 .Net 3.5 x64 en mi proyecto ASP.NET y ahora recibo este error (cada vez que intento 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 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 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á compilada) nos dio el mismo error en nuestro servidor Windows x64.

Intenté compilar para x86 y x64 y recibí el mismo error. Intenté eliminar todos los resultados del compilador (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 compilació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 pila 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 programa 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.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.Web.Configuration.CompilationSection.LoadAssembly (AssemblyInfo ai) +105
System.Web.Compilation.BuildManager.GetReferencedAssemblies (CompilationSection compConfig) +178
System.Web.Compilation.BuildProvidersCompiler..ctor (VirtualPath configPath, Boolean supportLocalization, String outputAssemblyName) +54
System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult (Boolean isPrecompiledApp) +232
System.Web.Compilation.BuildManager.CompileGlobalAsax () +52 System.Web.Compilation.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 programa con un formato incorrecto.]
System.Web.Compilation.BuildManager.ReportTopLevelCompilationException () +58 System.Web.Compilation.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 programa 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


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


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 arquitecturas 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 arquitectura 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"; }


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.


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.


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 compilarse 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"


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


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:

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 compilació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: [email protected]


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.


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


Tengo una máquina de desarrollo de 64 bits y un servidor de compilación de 32 bits. Usé este código antes de la inicialización de NHibernate. Funciona con encanto en cualquier arquitectura (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"; }


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


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.


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.


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