¿Cómo puedo solucionar la dependencia CRT causando una FileLoadException con mi VC2005 DLL de modo mixto en XP?

StackOverflow https://stackoverflow.com/questions/4196030

Pregunta

Tengo una DLL de modo mixto integrado en Visual Studio 2005. En Dependency Walker, mi DLL está mostrando una dependencia de los siguientes Dlls CRT. Tenga en cuenta que esto es en mi Windows 7 máquina Desarrollos.

c: \ windows \ winsxs \ x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5 \ Msvcp80.dll

"\ Msvcr80.dll

"\ msvcm80.dll

8.0.50727.4927

En mi Windows 7 máquina del revelador utilizando Visual Studio 2005 En este compila y ejecuta bien. el problema es que no funcionarán en mi máquina de prueba de Windows XP con el último CRT instalado.

Cuando arrastrar el archivo DLL en depenency andador en la máquina XP parece ser la búsqueda de los archivos DLL en \ System32 ... (Fui a mostrar ruta completa y no había caminos para ellos, sólo un signo de exclamación amarillo)

El problema es que esta versión (build 4927) del CRT en WinSxS no está instalado en la máquina de prueba XP. que tiene Visual Studio 2005 con instalada la última versión de CRT (SP1?).

8.0.50727.4053 es la versión más reciente que pude encontrar en MSDN.

Me di cuenta que no es la cuestión más interesante publicado en SO, pero ¿alguien sabe lo que pasa con este 4927 de tiempo de ejecución?

* Editar *

El manifiesto generada por Mt.exe:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

Por lo tanto, hay 3 versiones diferentes que está proyectando ...

¿Fue útil?

Solución

Revisión 4927 es una versión específica de Windows 7, probablemente usado por los binarios de Microsoft. Su construcción no debe crear una dependencia de ella, 4053 es el último para VS2005. No solucionar esto con depends.exe por cierto, no es bueno en el seguimiento WinSxS dependencias.

Inicio solucionar este haciendo doble comprobación de lo que la dependencia a su acumulación genera. Primer vistazo en VC \ include \ crtassem.h, la macro _CRT_ASSEMBLY_VERSION genera la entrada de manifiesto. Siguiente es comprobar el manifiesto que está incrustado en el ejecutable. directorio de lanzamiento de su proyecto contiene el archivo .embed.manifest que fue incrustada. Y Archivo + + Abrir archivo de su ejecutable le permite mirar en el recurso RT_MANIFEST incrustado real.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top