Tengo dos proyectos, ProjectA
y ProjectB
. ProjectB
es una aplicación de consola, que depende de ProjectA
. Ayer, todo funcionaba bien, pero de repente hoy cuando corro ProjectB
me sale esto:
BadImageFormatException no se manejó :
no se pudo cargar el archivo o ensamblado 'ProjectA, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto.
Ambos son solo proyectos regulares, sin dependencias de ningún otro proyecto que no sea .Net. Ambos son completamente .Net: no hay código nativo ni P / Invoke. Tengo otros proyectos que dependen ProjectA
y aún funcionan bien.
Cosas que he probado:
- Asegúrese de que ambos proyectos estén configurados en "Cualquier CPU", con la casilla de verificación de compilación marcada. Son.
- Asegúrese de que ambos proyectos sean para el mismo Marco de destino (.Net 4.0 Client Profile) .
- En ProjectB -> Referencias -> ProjectA -> Propiedades, asegúrese de que "Copiar local" esté configurado en "Verdadero" _ (verifiqué que ProjectA.dll se está copiando correctamente)
- Limpiar / reconstruir la solución. Incluso intenté eliminar manualmente las carpetas / bin y / obj en ambos proyectos.
- Reinicie Visual Studio. Reiniciar mi computadora.
- Echa un vistazo a una copia completamente nueva del repositorio.
Pero sigo teniendo el mismo error. No tengo idea de qué hice para causar esto, ni cómo solucionarlo. ¿Algunas ideas?
fuente
Respuestas:
Estoy bastante seguro de que tienes un conflicto de 32 bits / 64 bits. Parece que su proyecto principal podría establecerse en 32 bits mientras que la clase a la que hace referencia está establecida en 64 bits. Intenta mirar esta pregunta SO y esta también . Entre los dos, deberías poder resolver tu problema.
fuente
project-->properties-->build
, se configuró para x86; establecerlo en "Cualquier CPU" solucionó este problema. Siempre pensé que esta configuración era la misma que la del menú desplegable "objetivo de plataforma" en el administrador de configuración, pero aparentemente no lo es (de hecho, el "objetivo de plataforma" en el administrador de configuración no parece hacer nada en absoluto)<PlatformTarget>x86</PlatformTarget>
a uno de los proyectos dependientes sin ningún motivo. Si no hubiera investigado SVN, nunca habría descubierto por qué nuestra aplicación MVC no se inicia.Es posible que esté enfrentando el problema con su sitio web después de implementarlo en el servidor.
Luego debe ajustar su grupo de aplicaciones para habilitar aplicaciones de 32 bits .
Pasos
Desde el panel derecho, haga clic en Configuración avanzada ...
Establezca Habilitar aplicaciones de 32 bits en Verdadero
fuente
Acabo de recibir este mensaje de error al ejecutar IIS Express en Visual Studio 2015. En mi caso, necesitaba ejecutar la versión de 64 bits de IIS Express:
Captura de pantalla:
fuente
Yo tuve el mísmo problema. Había establecido el "Objetivo de plataforma" del Proyecto A ("Proyecto A" (clic derecho) -> Propiedades-> Compilación -> "Objetivo de plataforma") en x86 pero mantuve el Proyecto B en "Cualquier CPU". Establecer el Proyecto B en "x86" solucionó esto.
fuente
Tuve este problema al ejecutar pruebas unitarias (xunit) en Visual Studio 2015 y encontré la siguiente solución:
fuente
Es posible que necesite cambiar la appication piscina ajuste "Habilitar 32 bits Aplicaciones" a TRUE en IIS7 si tiene al menos 1 de 32 bits DLL \ exe en su proyecto.
fuente
En primer lugar, obtuve esto en VS2017 con un proyecto antiguo que necesitaba para hacer un pequeño cambio y actualizar todos los proyectos al marco 4.7.
Varios otros han mencionado que la selección
Any CPU
puede solucionar este problema.Hay un par de lugares que debes hacer, y puede que no sea tan simple como seleccionar del menú desplegable. Esto me lo arregló:
1) Tienes que hacerlo tanto aquí:
2) Y también en
Configuration Manager
(clic derecho en la solución)Pero, ¿y si no está allí?
Luego haga clic
New
y elija esta configuración: ( gracias @RckLN )fuente
Tuve el mismo problema con varios proyectos en la misma solución, terminé configurando todos los marcos de destino a .NET Framework 4 y x86 para la CPU de destino y finalmente se compiló con éxito.
fuente
También puede ver este problema si está intentando empaquetar un proyecto de 64 bits con un instalador MSI en VS. ("La razón es porque el shim nativo empaquetado con el archivo .msi es un ejecutable de 32 bits").
Ver aquí para más detalles: http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx
fuente
Ninguna de estas soluciones funcionó para mí, pero al eliminar el contenido de las carpetas bin y obj todo volvió a estar bien.
fuente
Obtuve esto cuando construí un proyecto a través de Visual Studio Online (VSTS) Build usando
Visual Studio Build
Steps.La solución fue:
fuente
Lo siguiente resolvió el problema para mí, desmarque 'Preferir 32 bits':
fuente
Encontré el mismo problema. Surgió de la nada y eso me pareció extraño.
En la instantánea de Excepción, para el FusionLog, vi lo siguiente dentro de su mensaje:
... C: \ Windows \ Microsoft.NET \ Framework64 ...
Más sobre el registro de fusión: http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx
Todos los proyectos tenían una CPU de destino de AnyCPU. Cambié el proyecto de aplicación (el proyecto que hace referencia a todos los demás proyectos) a una CPU de destino de x86. Ahora funciona
No estoy seguro de cómo ocurrió la confusión de CPU de destino sin razón aparente, pero lo hizo.
fuente
También me enfrento a este problema en un proyecto, después de unos minutos encontré la solución, este problema se debe a la configuración de la CPU. Si está utilizando Visual Studio 2010 o VS 2013 , simplemente vaya a las propiedades del proyecto y luego seleccione Compilar en la barra lateral y habrá 5 desplegables, el quinto desplegable será CPU objetivo: debe configurarlo en x86 o x64 de acuerdo con sus requisitos en lugar de cualquier CPU.
Mi problema se resolvió después de cambiarlo a x86.
fuente
Esto también puede suceder simplemente al tener múltiples marcos soportados definidos en el archivo app.config y forzando a la aplicación a ejecutarse en un marco .NET diferente al que se menciona primero en el archivo app.config .
Y esto también se dispara cuando tiene ambos marcos mencionados disponibles en su sistema.
Como solución alternativa, abra el marco de destino que va a utilizar para la depuración en la aplicación.
Ej: si intenta ejecutar en .NET 4, el archivo de configuración debería tener algo similar a esto,
fuente
En mi proyecto para C #, propiedad del proyecto -> [Build] -> Target de plataforma: cualquier CPU, y desmarque Prefer 32-bit para permitir que el compilador elija automáticamente.
fuente
El ensamblaje de Chilkat .NET 4.5 requiere que se instale el tiempo de ejecución VC ++ 2012 o 2013 en cualquier computadora donde se ejecute la aplicación. La mayoría de las computadoras ya lo tendrán instalado. Su computadora de desarrollo lo tendrá porque Visual Studio ha sido instalado. Sin embargo, si se implementa en una computadora donde el tiempo de ejecución VC ++ requerido no está disponible, se producirá el error anterior:
Instale todos los paquetes de abajo
Paquetes redistribuibles de Visual C ++ para Visual Studio 2013 - vcredist_x64
Paquetes redistribuibles de Visual C ++ para Visual Studio 2013 - vcredist_x86
Paquetes redistribuibles de Visual C ++ para Visual Studio 2012 - vcredist_x64
Paquetes redistribuibles de Visual C ++ para Visual Studio 2012 - vcredist_x86
fuente
Si usa LibreOffice desde su programa a través de la integración de cli .net como yo, obtengo el mismo error. Utilizo la versión anterior de LibreOffice en el entorno de producción en mi PC. Instalé una versión más nueva que estaba en conflicto. Simplemente desinstale LibreOffice. Encontré la solución aquí .NET CLI: No se pudo cargar el archivo o ensamblado 'cli_cppuhelper'
fuente
Puede ser un poco divertido, pero tuve el mismo problema con el código de trabajo normal. Agregué StreamWriter y StreamReader y me dio ese error. La solución fue que tomé ese código entre paréntesis, luego lo depuré y comenzó a funcionar nuevamente
fuente
También tuve este problema al ejecutar pruebas unitarias usando ReSharper en Visual Studio 2017 y lo arreglé con la siguiente configuración:
También puede cambiar la configuración de prueba de ejecución de ReSharper: https://resharper-support.jetbrains.com/hc/en-us/articles/207242715-How-to-run-MSTest-tests-using-x64-configuration
fuente
En mi caso faltaba una dependencia en el dll que arrojó esta excepción. Verifiqué con Dependency Walker, agregué el dll faltante y el problema se resolvió.
Más específicamente, de alguna manera corrompí mi opencv_core340.dll al agregarle accidentalmente palabras clave SVN y, por lo tanto, mi dll ya no podía usarlo. Sin embargo, no creo que la solución a este problema dependa de si el dll está dañado o falta. Solo estoy agregando esto en aras de dar información completa.
fuente
¡Disparar! Sabía sobre este problema. Pensé que estaba haciendo todo bien hasta que accidentalmente vi 'x86' en la ventana de salida de VS y fue entonces cuando me di cuenta de la causa. Perdí unos minutos hoy.
La configuración en la ventana 'Publicar' se estableció en 'x86'; mientras que, en todas partes, era 'x64'.
Asegúrese de que esté sincronizado en el administrador de configuración, la configuración de publicación, la configuración de la solución y la configuración de IIS (si ese es su servidor web).
Además, tenga en cuenta: VS es una aplicación de 32 bits e IIS es de 64 bits. Las aplicaciones de 32 bits están deshabilitadas de manera predeterminada en IIS.
fuente
He detectado algo diferente de las otras respuestas. Llegar a esta excepción en mi proyecto fue el resultado de una compilación corrupta. Sin hacer ningún cambio, solo forzando la reconstrucción , se solucionó.
fuente
Tuve el mismo problema. El Proyecto B en mi caso era una biblioteca de clases de .Net Core que tiene instalada una "Microsoft.Management.Infrastructure" de Nuget. El error fue que llamé a mi proyecto B "MI". Cambié el nombre del proyecto a otra cosa y de repente todo volvió a funcionar.
fuente
Mi máquina me mostró una actualización del BIOS y me pregunté si eso tiene algo que ver con la aparición repentina de este error. Y después de que hice la actualización, el error se resolvió y la solución se compiló bien.
fuente
¿Está intentando ejecutar su archivo .exe desde el cmd? Este fue mi error. Simplemente ejecute el archivo .exe haciendo doble clic en él. Si se trata de un .NET Core SCD para Windows 8.1 / Windows Server 2012 R2 x64.
fuente