我有一个用 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 复制不应该结束吗???)
如果有人对我有解释,我将不胜感激!