msvcp90.dll зависит от неправильного msvcr90.dll? - PullRequest
5 голосов
/ 21 октября 2011

У меня есть проект DLL, построенный с VS2008 (amd64). Манифест длл говорят

<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 не может быть найден!?! Эй, он находится в одном каталоге winsxs вместе с msvcm90.dll и msvcp90.dll! Если я копирую правильный msvcr90.dll в ту же директорию, что и моя dll, она работает! (Но опять же, разве это не та ситуация, которая была у нас во времена DllHell? И разве не должно быть закончено копирование msvc * .dll, так как у нас есть манифесты ???)

Я был бы очень признателен, если бы у меня было объяснение для меня!

1 Ответ

1 голос
/ 25 декабря 2011

В манифесте Microsft ввел новый вид «dll hell» для разрешения «dll hell»: (

Кстати, последняя версия, на которую вы ссылаетесь (9.0.30729), - это ЭЛТ MSVCR9, обновленная до SP1. Может быть, вы попытаетесь обновить VS2008 этой версией, чтобы «синхронизировать» манифест.

...