I have a dll project built with VS2008 (amd64). The manifest of the dll say
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' />
When I load the dll into DependencyWalker it refers to winsxs-directory
amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251
How can that happen? Isn't this whole manifest-thing meant to avoid situations like that by giving every dll/exe the information which version it is built with and therefore the CRT-version it depends upon?
And the second, even more confusing thing is that the msvcp90.dll depends on msvcr90.dll but the msvcr90.dll cannot be found!?! Hey, it's in the same winsxs-directory together with msvcm90.dll and msvcp90.dll! If I copy the right msvcr90.dll in the same directory as my dll it works! (But again, isn't that the situation we had in DllHell times? And shouldn't that msvc*.dll-copying should be over since we have manifests???)
I would be really grateful if anyone has an explanation for me!
With manifest, Microsft had introduced a new kind of "dll hell" to resolve "dll hell" :(
By the way, the last version you are referencing (9.0.30729) is the MSVCR9 CRT upgraded to SP1. May be you could try to update your VS2008 with this version to "synchronize" the manifest.