5

我有一个用 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 复制不应该结束吗???)

如果有人对我有解释,我将不胜感激!

4

1 回答 1

1

通过 manifest,Microsft 引入了一种新的“dll hell”来解决“dll hell”:(

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

于 2011-12-24T21:36:26.790 回答