2010-06-07 9 views
9

Tengo una dll de C++/cli que cargo en tiempo de ejecución y que funciona muy bien en modo de depuración. Si intento cargar el dll en modo de lanzamiento, no se carga indicando que faltan una o más dependencias. Si ejecuto depende de ello, me falta MSVCR90.DLL de MSVCM90.DLL. Si compruebo la versión de depuración del dll también tiene la dependencia que falta, pero en contra de la versión de depuración (D).C++/CLI Missing MSVCR90.DLL

Me he asegurado de que la depuración/liberación incruste el archivo de manifiesto. Leí algo sobre problemas con la aplicación al cargar el archivo DLL que se está compilando como Any CPU y el dll que se está compilando como x86, pero no veo cómo configurar ambos en x86.

Estoy usando VS2010.

De todos modos, hace tiempo que estoy haciendo el tonto y no tengo idea de lo que está mal. Estoy seguro de que alguien por ahí sabe lo que está pasando. Avíseme si necesito incluir información adicional.

alt text http://www.freeimagehosting.net/uploads/fb31c0e256.png

ACTUALIZACIÓN:

Esto terminó siendo la solución a mi problema: http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/07794679-159b-4363-ae94-a68fe258d827

+0

Quizás la configuración de sus propiedades del proyecto sea incorrecta, simplemente establezca lo siguiente: biblioteca C++/Generación de código/Runtime // MdD – ashiontang

Respuesta

10

msvcr90 es el tiempo de ejecución de Visual Studio 2008 . Si está ejecutando su aplicación en su PC de desarrollo, entonces debe tener los tiempos de ejecución de depuración y liberación instalados (como parte de Visual Studio), pero es posible que algo haya ido mal con su instalación, o que VS2010 no incluye realmente el antiguo tiempos de ejecución. Si intenta ejecutar el lanzamiento en una PC diferente, solo necesita el tiempo de ejecución instalado.

De cualquier manera, puede solucionarlo instalando el Visual Studio 2008 redistributable, pero asegúrese de obtener la descarga correcta para su PC (x86 o x64).

En versiones anteriores de VS, necesitabas el tiempo de ejecución para la versión con la que compilabas, por lo que si VS2010 sigue este precedente, necesitarías MSVCR100, no MSVCR90, lo que sugiere que no hayas recompilado el dll con VS2010. hacerlo puede ser otro enfoque para ejecutarlo en su PC (utilizando la redista que está en su instalación VS2010), pero tenga en cuenta que aún necesitará que otros usuarios instalen la redistribución (VS2010) apropiada en su PC.

En cuanto a "Cualquier CPU" frente a "x86", este es un problema solo en una computadora de 64 bits. En esos sistemas, una aplicación de 64 bits no puede vincular dinámicamente a dlls de 32 bits. Si compila su aplicación como "Cualquier CPU", se compilará JIT para ser de 64 bits en un sistema operativo de 64 bits, por lo que se bloqueará si intenta llamar directamente a cualquier dll de 32 bits. La solución es crear la aplicación dirigida a "x86", ya que obliga al compilador JIT a generar código de 32 bits (incluso en una máquina de 64 bits) y así garantiza la compatibilidad con el dll al que desea llamar. Si el DLL es un ensamblado administrado, entonces puede usar Any CPU tanto en la aplicación como en el dll, ya que ambos estarán JITted en el mismo formato.

+0

Esto está en mi cuadro de desarrollo y estoy apuntando .NET 3.5 con VS2010 que termina usando VS2008 para compilar.No estoy seguro de si es extraño o no. Entonces es correcto que esté usando las 90 versiones de los dlls. –

+0

Esta fue una respuesta a mi pregunta, pero no resolvió mi problema. Todavía no sé qué está mal con mi entorno de desarrollo, pero no puedo cargar esos dlls en el modo de lanzamiento. Funcionan bien en otras máquinas con vt ++ runtime CRT instalado. –

+0

@Mitch. Perdón por escuchar eso. Todo lo que puedo sugerir es intentar (re) instalar el paquete de redist en su PC (los dlls están incluidos en la instalación de Visual Studio, pero en realidad no instala el paquete de redist, por lo que es ligeramente diferente de lo que obtendría en un PC del usuario): si eso no funciona, lo único que se me ocurre es volver a instalar Visual Studio. No parece un problema con tu compilación, porque dices que funciona bien en otras PC, por lo que es definitivamente algo diferente de tu PC. –

1

Me pasó algo similar al ejecutar un sitio web en Vistual Studio 2012, después de migrar desde Visual Studio 2010. El mensaje de error decía que faltaba MSVCR90.DLL. La solución fue: 1) Elimine la carpeta _bindeployable ubicada en la ruta del proyecto. 2) Reconstruir.

Espero que ayude.