J'ai une DLL en mode mixte construite dans Visual Studio 2005. Dans le dépendant de dépendances, ma DLL montre une dépendance des Dll CRT suivants. Notez que ceci est sur ma machine de développement Windows 7.Comment réparer la dépendance CRT provoquant une exception FileLoadException avec ma DLL en mode mixte vc2005 sur XP?
c: \ windows \ winsxs \ x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5 \ msvcp80.dll
"\ Msvcr80.dll
" \ msvcm80.dll
8.0.50727.4927
Sur ma machine de développement Windows 7 en utilisant Visual Studio 2005, cela se compile et s'exécute très bien. le problème est qu'il ne fonctionnera pas sur ma machine de test Windows XP avec le dernier CRT installé. Lorsque je fais glisser la DLL dans le walker depenency sur la machine XP, il semble chercher les DLL dans \ System32 ... (Je suis allé montrer le chemin complet et il n'y avait pas de chemins pour eux, juste un point d'exclamation jaune
Le problème est que cette version (build 4927) du crt dans WinSxS n'est pas installée sur la machine de test XP. il a Visual Studio 2005 avec le dernier CRT installé (sp1?).
8.0.50727.4053 est la dernière version que j'ai pu trouver sur MSDN.
Je me rends compte que ce n'est pas la question la plus excitante publiée sur SO, mais est-ce que quelqu'un sait ce qui se passe avec cette exécution 4927?
* EDIT *
Le manifeste généré par 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>
Donc, il y a 3 versions différentes, il vise ...
La version dans la macro _CRT_ASSEMBLY_VERSION est la révision 4053 pour moi, qui a la machine XP. Il y a un mydll.dll.manifest dans mon dossier de sortie, quand je l'ouvre il indique 8.0.50608.0 (RTM?). Je n'ai pas trouvé un embed.manifest dans mon répertoire de solution. pouvez-vous élabérer sur la partie Fichier + Ouvrir + Fichier? J'ai regardé le manifeste dans ILDasm et il dit ".module extern MSVCR80.dll" et ".assembly extern Microsoft.VisualC {ver 8: 0: 0: 0}" .. Je suppose qu'il s'agit d'un manifeste "Managed" et cette section RT_MANIFEST est une sorte de chose PE intégrée? Je me trompe probablement, s'il vous plaît éduquez-moi =) –
Si ildasm.exe fonctionne, il s'agit en fait d'une DLL managée. Êtes-vous #including tout en-têtes CRT dans le code C++/CLI? Si vous n'avez pas alors au moins inclure crtdefs.h pour obtenir le manifeste approprié. –
Vous pouvez également utiliser ManifestView (http://weblogs.asp.net/kennykerr/archive/2007/07/10/10manifest-view-1-0.aspx) pour extraire le manifeste d'une DLL ou d'un exécutable. –