Aparece el error "Se intentó cargar un programa con un formato incorrecto" en un proyecto de replicación de SQL Server


318

El error exacto es el siguiente

No se pudo cargar el archivo o ensamblado 'Microsoft.SqlServer.Replication, Version = 9.0.242.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91' o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto.

Recientemente comencé a trabajar en este proyecto nuevamente después de un cambio de dos meses a otro proyecto. Funcionó perfectamente antes, y he revisado todas las referencias.

Respuestas:


405

La respuesta de Baldy a continuación es correcta, pero es posible que también deba habilitar las aplicaciones de 32 bits en su AppPool.

Fuente: http://www.alexjamesbrown.com/uncategorized/could-not-load-file-or-assembly-chilkatdotnet2-or-one-of-its-dependencies-an-attempt-was-made-to-load- un-programa-con-un-formato-incorrecto /

Al configurar una aplicación para que se ejecute en mi máquina local (ejecutando Vista de 64 bits) me encontré con este error:

No se pudo cargar el archivo o ensamblado ChilkatDotNet2o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto.

Obviamente, la aplicación usa componentes ChilKat , pero parece que la versión que estamos usando es solo la versión de 32 bits.

Para resolver este error, configuré mi grupo de aplicaciones en IIS para permitir aplicaciones de 32 bits. Abra el Administrador de IIS, haga clic con el botón derecho en el grupo de aplicaciones y seleccione Configuración avanzada (consulte a continuación)

ingrese la descripción de la imagen aquí

Luego configure "Habilitar aplicaciones de 32 bits" en Verdadero.

ingrese la descripción de la imagen aquí

¡Todo listo!


¿Causaría esto que todo el grupo de aplicaciones se ejecute como 32 bits y no como completo de 64 bits? ¿Volver a compilar la dependencia para plataformas de 64 bits / todas sería una mejor solución? Tengo este problema debido a NFOP, pero como es de código abierto, podría volver a compilarlo.
jamiebarrow

2
El enlace no funciona, pero su explicación fue suficiente para resolver mi problema. +1
Andrew Shepherd

Enlace con instrucciones sobre cómo habilitar aplicaciones de 32 bits: blogs.msdn.com/b/rakkimk/archive/2007/11/03/…
Brandon S

15
Vale la pena señalar que esta solución de AppPool solo se aplica a aplicaciones ASP.NET, podría confundir a algunos desarrolladores que nunca usaron / configuraron ASP.NET o IIS.
galaktor

no lo arregla en IIS7 solo en IIS7.5
FlavorScape

120

He encontrado la solución. Recientemente actualicé mi máquina a Windows 2008 Server de 64 bits. El espacio de nombres SqlServer.Replication se escribió para plataformas de 32 bits. Todo lo que necesitaba hacer para que volviera a funcionar era configurar la Plataforma de destino en las Propiedades de compilación del proyecto en X86.


Tengo este problema con una DLL, pero mi Proyecto> Propiedades de HDP ... no tiene una pestaña "Compilar" (aparentemente todo pero, pero no eso). Las pestañas Compilar y Depurar tienen un menú desplegable "Plataforma", pero el único elemento en el menú desplegable en ambos casos es "Activo (cualquier CPU)".
B. Clay Shannon

Me encontré con el reverso del problema anterior. Tenía todo funcionando en 64 bits y mi objetivo de compilación era cualquier CPU. Cuando cambié esto a 64 bits, funcionó perfectamente bien :)
Madhurya Gandi

87

Cambie el valor de Platform Target en la página de propiedades de su proyecto web a Any CPU.

ingrese la descripción de la imagen aquí


No tiene ningún efecto, desafortunadamente.
Jonathan

44
Me equivoqué, esto funcionó, después de deshacerme de todas mis carpetas 'bin'. ¡Gracias!
Jonathan

También solucioné mi problema, pero solo después de hacer esto para CADA proyecto en mi solución. Los pasos mencionados son para proyectos de C #. Para proyectos VB.NET, cambie Propiedades del proyecto> Compilar> Opciones de compilación avanzadas> CPU de destino a "AnyCPU"
Francois Botha

66
En mi caso, el proyecto ya estaba dirigido a "Cualquier CPU". Pero estoy ejecutando Windows de 64 bits y estaba tratando de importar un controlador de hardware de la vieja escuela. Específicamente, cambiar el objetivo a x86 lo arregló para mí.
bsegraves

En mi caso, quería correr bajo x64. No estaba funcionando Después de cambiar todas las recomendaciones, también tuve que cambiar el 'Bitness' en la Web también a x64
SKCS Kamal

52

Vaya a IIS -> Grupo de aplicaciones -> Configuración avanzada -> Habilitar aplicaciones de 32 bits


Clay, ¿qué versión de IIS estás usando?
Harpal

23

Recientemente tuvimos el problema al intentar ejecutar el código desde Visual Studio. En ese caso, debe hacer
HERRAMIENTAS> OPCIONES> Proyectos y soluciones> PROYECTOS WEB y marcar "Usar la versión de 64 bits de IIS Express para sitios web y proyectos".


1
Esto es lo que finalmente funcionó para mí. ¡Especialmente para personas que intentan depurar API web con bibliotecas de Service Fabric! Si está utilizando cualquier DLL de Service Fabric en su proyecto, asegúrese de estar utilizando la solución anterior.
Chris Dutra

Esta es la ÚNICA solución que funcionó para mí. Gracias. : D
Jeremy Styers

¡Trabaja para mí también!
Cù Đức Hiếu

11

Para aquellos que obtienen este error en un proyecto ASP.NET MVC 3 , dentro de Visual Studio:

En una aplicación ASP.NET MVC 3 en la que estoy trabajando, intenté agregar una referencia a Microsoft.SqlServer.BatchParser a un proyecto para resolver un problema donde faltaba en un servidor de implementación. (Nuestra aplicación usa SMO; la solución correcta fue instalar SQL Server Native Client y un par de cosas más en el servidor de implementación).

Incluso después de eliminar la referencia a BatchParser, seguía recibiendo el error "Se hizo un intento ...", haciendo referencia a la DLL de BatchParser, en cada página ASP.NET MVC 3 que abrí, y ese error fue seguido por docenas de análisis de páginas errores

Si esto le sucede, realice una búsqueda de archivos y vea si la DLL todavía está en una de las carpetas \ bin de su proyecto. Incluso si realiza una reconstrucción, Visual Studio no necesariamente borra todo en todas sus carpetas \ bin. Cuando eliminé la DLL de la papelera y volví a construir, el error desapareció.


Acabo de hacer una reconstrucción y el problema desapareció sin tener que eliminar manualmente la DLL. ¡Gracias!
Trevor

4

Tenía esto en una aplicación MVC5 en Windows 10 contra IIS Express. Mi solución fue la siguiente:

  • Herramientas =>
    • Opciones =>
      • Proyectos y Soluciones =>
        • Proyectos web =>
          • Use la versión de 64 bits de IIS Express para sitios web y proyectos

3

cámbielo a 32 bits (verdadero) funciona

si obtiene esta longitud no puede ser menor que cero. Nombre del parámetro: el problema de longitud en la configuración del servidor iis hace que lo simple cambie la cadena de conexión en el archivo web.config como el nombre del servidor sql y el nombre del servidor y reinicie iis, luego intente cargar la página que funciona


2

Si se publica en Visual Studio 2012 cuando se produce un error, intente desmarcar la opción "Procompilar durante la publicación" en el asistente de publicación.

Desmarque "Precompilar durante la publicación"


0

en la aplicación de formulario de Windows, hago esto, haga clic derecho en Proyecto-> Propiedades-> Construir-> Marque la casilla de verificación Preferir 32 bits. Gracias a todos


0
  1. Elimine el directorio de prueba temporal ubicado aquí C: \ Users (User) \ AppData \ Local \ Temp \ VisualStudioTestExplorerExtensions \

  2. Establecer todos los proyectos a x64 en Visual Studio

  3. Establezca la arquitectura de procesador predeterminada en x64 (Test / TestSettings / Default Processor Architecture).

Asegúrese de limpiar la compilación del archivo de solución. ¡Espero que esto ayude!


0

Cambiar el Marco de destino en las propiedades del proyecto de .NET Framework 4.7.1 a 4.6.2 funcionó para mí.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.