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.

calvo
fuente

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!

bboyle1234
fuente
¿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.

calvo
fuente
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í

p.campbell
fuente
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

Harpal
fuente
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".

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

Ryan Lundy
fuente
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
krillgar
fuente
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

munwar shaiik
fuente
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"

SushiGuy
fuente
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

Amirhossein Yari
fuente
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!

Madhurya Gandi
fuente
0

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

sussexrick
fuente