visual-c++ manifest side-by-side

visual c++ - El compilado binario para VS2008 necesita el ensamblado DebugCRT uno al lado del otro, no funciona en VS2010



visual-c++ manifest (1)

En la computadora que funciona, mira en la carpeta:

C: / Archivos de programa (x86) / Microsoft Visual Studio 9.0 / VC / redist / Debug_NonRedist / x86 / Microsoft.VC90.DebugCRT

Aquí es donde se encuentran los dlls de tiempo de ejecución de la versión necesaria para ejecutar. También hay un archivo de manifiesto allí. Puede buscar en el visor de eventos (eventvwr.exe) para ver qué versión de DLL está buscando el ejecutable, y luego puede modificar el archivo de manifiesto (más bien, modificar una copia que coloque en el directorio ejecutable con las DLL) por lo que identificará los archivos incluidos como esa versión.

Estoy trabajando con VS2010 en un proyecto que usa Havok, y la última versión solo tiene VS2008 y binarios anteriores. El manifiesto incrustado generado por VS contiene lo siguiente

<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

Dado que, al parecer, VS ya no utiliza ensambles paralelos ( origen ) a partir de 2010, mi directorio winsxs no tiene instalados los ensamblados de depuración y el paquete vs redistribuible no instala las versiones de depuración. Si compilamos los dlls que usan Havok con un manifiesto incrustado, las aplicaciones que cargan los dlls no se inician.

Ejecuté sxstrace y obtuve lo siguiente:

INFO: Begin assembly probing. INFO: Did not find the assembly in WinSxS. INFO: Attempt to probe manifest at G:/Windows/assembly/GAC_32/Microsoft.VC90.DebugCRT/9.0.21022.8__1fc8b3b9a1e18e3b/Microsoft.VC90.DebugCRT.DLL. INFO: Attempt to probe manifest at D:/Projects/GTS new/bld/Debug/Microsoft.VC90.DebugCRT.DLL. INFO: Attempt to probe manifest at D:/Projects/GTS new/bld/Debug/Microsoft.VC90.DebugCRT.MANIFEST. INFO: Attempt to probe manifest at D:/Projects/GTS new/bld/Debug/Microsoft.VC90.DebugCRT/Microsoft.VC90.DebugCRT.DLL. INFO: Attempt to probe manifest at D:/Projects/GTS new/bld/Debug/Microsoft.VC90.DebugCRT/Microsoft.VC90.DebugCRT.MANIFEST. INFO: Did not find manifest for culture Neutral. INFO: End assembly probing. ERROR: Cannot resolve reference Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8". ERROR: Activation Context generation failed. End Activation Context Generation.

Las aplicaciones funcionan en una de las máquinas de mi compañero de trabajo, ya que (presumiblemente) tenía VS2008 instalado en él, pero no en otro compañero de trabajo o en el mío, ya que solo tenía VS2010 instalado. Los únicos archivos de debugcrt que tiene la máquina en funcionamiento en el directorio de winsxs son

x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb

como una carpeta con los dlls, un archivo .manifest y un archivo .cat (mismo publicKeyToken pero con una versión diferente)

Intenté copiar los archivos en mi directorio de winsxs, lo que no solucionó el problema. Colocar los dlls directamente en el directorio con los binarios tampoco hizo nada. Colocar los archivos en bin/Microsoft.VC90.DebugCRT.DLL (ya que era uno de los directorios buscados de acuerdo con sxstrace) también no pudo ayudar, pero el resultado de sxstrace cambió a

INFO: Begin assembly probing. INFO: Did not find the assembly in WinSxS. INFO: Attempt to probe manifest at G:/Windows/assembly/GAC_32/Microsoft.VC90.DebugCRT/9.0.21022.8__1fc8b3b9a1e18e3b/Microsoft.VC90.DebugCRT.DLL. INFO: Attempt to probe manifest at D:/Projects/GTS new/bld/Debug/Microsoft.VC90.DebugCRT.DLL. INFO: End assembly probing. ERROR: Activation Context generation failed.

(deja de buscar y puede resolver la referencia, pero la generación de contexto aún falla)

Lo único que funciona es deshabilitar la generación de manifiesto incrustado. ¿Hay alguna otra forma de resolver esto?