我有一个用VS2008 (amd64)构建的dll项目。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目录中!如果我在与我的dll相同的目录中复制正确的msvcr90.dll,它可以工作!(但再说一次,这不是DllHell时代的情况吗?既然我们有舱单,那么msvc*..dll复制不应该结束吗??)
如果有人能给我解释的话,我会非常感激的!
发布于 2011-12-24 21:36:26
在清单中,Microsft引入了一种新的"dll地狱“来解决"dll地狱”:
顺便说一下,您所引用的最后一个版本(9.0.30729)是升级到MSVCR9的SP1。也许您可以尝试用这个版本更新您的VS2008,以“同步”清单。
https://stackoverflow.com/questions/7850541
复制相似问题