2011-05-29 12 views
9

Estoy trabajando con VS2010 en un proyecto que usa Havok, y la versión más reciente solo tiene VS2008 y binarios anteriores. El manifiesto incrustado generado por VS contiene la siguienteCompilación binaria para VS2008 necesita el ensamblado DebugCRT de dos puertas verticales, no funciona en VS2010

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

ya que al parecer ya no utiliza VS montajes de lado a lado (source) a partir de 2010, mi directorio winsxs no tiene la depuración instalan los conjuntos de CRT, y la vs paquete 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.

me corrieron sxstrace y tiene el 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) que había instalado VS2008 en él, pero no en otro compañero de trabajo o en la mía, ya que solo se ha instalado VS2010. presenta la única debugcrt la máquina de trabajo en el directorio ha winsxs son

x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb 

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

I' He intentado 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. La colocación de los archivos en bin\Microsoft.VC90.DebugCRT.DLL (ya que era uno de los directorios buscado acuerdo con sxstrace) tampoco logró ayudar, pero la salida 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. 

(que deja de buscar, y es capaz de resolver la referencia, pero la generación de contexto sigue fallando)

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

+0

¿VS genera manifiesto contra DebugCRT en modo Depuración y no en Versión? – abatishchev

+1

También echa un vistazo a [MSDN] (http://msdn.microsoft.com/en-us/library/aa985618.aspx). – abatishchev

Respuesta

1

En el equipo de trabajo, buscar 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.

Cuestiones relacionadas