我有一个用VS2008(amd64)构建的dll项目。 dll的清单说
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' />
当我将dll加载到DependencyWalker时,它引用winsxs-directory
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复制应该结束了吗?)
如果有人对我有解释,我将非常感激!
答案 0 :(得分:1)
随着清单,Microsft引入了一种新的“dll hell”来解决“dll hell”:(
顺便说一下,您引用的最后一个版本(9.0.30729)是MSVCR9 CRT升级到SP1。 也许您可以尝试使用此版本更新VS2008以“同步”清单。