2011-10-21 95 views
5

我有一个使用VS2008(amd64)构建的dll项目。 DLL的清单说msvcp90.dll依赖于错误的msvcr90.dll?

<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' /> 

当我加载DLL到DependencyWalker它指的winsxs文件目录

amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251 

如何发生的呢?是不是这整个明显的东西是为了避免这样的情况,通过给每个DLL/EXE的信息与它建立的版本,因此它所依赖的CRT版本?

;第二,更令人困惑的事情是,msvcp90.dll取决于MSVCR90.DLL MSVCR90.DLL将无法找到!?!嘿,它与msvcm90.dll和msvcp90.dll一起在winsxs目录中! 如果我将正确的msvcr90.dll复制到与我的dll相同的目录中,它的工作原理! (但是,这不是我们在DllHell时代的情况吗?并且不应该因为msvc * .dll-copying应该已经结束,因为我们有清单???)

如果有人有,我会非常感激对我的解释!

回答

1

有了清单,的Microsft引进了一种新的“DLL地狱”,以解决“DLL地狱” :(

顺便说一句,你引用的最后一个版本(9.0.30729)的是MSVCR9 CRT升级到SP1 也许你可以试着用这个版本来更新你的VS2008来“同步”这个清单。