SidBySide: Dll третьей стороны относится к двум версиям MSVCR80.DLL

Мы включили стороннюю библиотеку lib + DLL, которая в последнее время вызывает много проблем при установке. Используя dependencywalker , мы обнаружили, что сама dll ссылается на две разные версии

MSVCR80.DLL:
Version 8.0.50727.4053 and
Version 8.0.50727.42

альтернативный текст http://img101.imageshack.us/img101/1734/dependencywalk2.jpg

В большинстве случаев установка не создает проблем, даже если мы не распространяем ни одну из этих версий. Но в ряде случаев наша установка просто не начинается. Затем мы находим сообщения в журнале системных событий Windows из менеджера SideBySide: «Версия DLL не совпадает». В большинстве случаев эта проблема может быть решена путем установки .NET Framework (хотя мы не используем это). Но сейчас у нас есть случай, когда это не помогает.

Я знаю, что решением было бы установить обе версии как общую сборку, но это, кажется, не так просто, и кроме того, я бы предпочел гораздо более простое решение. Кто-нибудь знает обходной путь?

Могу ли я как-то использовать только одну версию Dll?

РЕДАКТИРОВАТЬ: Я сейчас попробовал совет христиан:

D:\Develop\LEADTOOLS15\patch_maifest>mt.exe -inputresource:ltkrn15u.dll;#1 -out:old.manifest
Microsoft (R) Manifest Tool version 5.2.3790.2075
Copyright (c) Microsoft Corporation 2005.
All rights reserved.

mt.exe : general error c101008c: Failed to read the manifest from the resource of file "ltkrn15u.dll". Ressource not found.

Если я просматриваю зависимости DLL с полными путями, я вижу следующее: альтернативный текст http://img340.imageshack.us/img340/4122/dependencywalk3.jpg

Нижняя MSVCR80.DLL - это версия ... 42. Я не понимаю этого. Почему MSVC P 80.DLL ссылается на другую версию MSVC R 80.DLL, отличную от той, которая находится рядом с ней. Это может быть проблема странника зависимостей?

13.10.2009 10:52:48
Я бы действительно связался со сторонним производителем lib и попросил их использовать только одну из версий!
stijn 13.10.2009 12:04:41
2 ОТВЕТА
РЕШЕНИЕ

Лучший вариант - отправить необходимые библиотеки DLL в пакете установщика вашего приложения. Используйте хотя бы версию, от которой зависит ваша сторонняя DLL.

Microsoft предлагает автономные установщики для своих библиотек времени выполнения (vcredits_ *). Последнюю версию VisualStudio 2005 можно скачать здесь . Это также версия, с которой связана ваша DLL. Вы можете тихо запустить распространяемый пакет из вашего установщика.

В качестве ручного обходного пути для уже установленных систем просто примените установщик redist на целевой машине.

Если вы выберете этот метод, вам не нужно бояться конфликтов версий, поскольку приложения, зависящие от более старых версий, будут перенаправлены, чтобы всегда использовать самую последнюю версию.

Для лучшего понимания вы посмотрите на эти статьи MSDN .

1
13.10.2009 11:46:14
Теперь я установил распространяемый файл Visual Studio 2005. Это действительно решило проблему. Интересно, что бесполезно просто копировать каталог сборки в наш каталог \ bin (содержащий все файлы DLL и EXE), как мы пытались раньше.
RED SOFT ADAIR 13.10.2009 13:00:16
vcredist - лучший вариант. Я видел один случай, когда пакет vcredist не удалось установить. Понятия не имею, почему это не сработало, мне пришлось вручную распаковать файл vcredist.exe и скопировать файлы рядом с нашим исполняемым файлом.
Cristian Adam 13.10.2009 13:12:18
Но почему копирование файлов рядом с моим исполняемым файлом НЕ работает, тогда как после установки vcredist решает проблему?
RED SOFT ADAIR 13.10.2009 13:21:11
В моем случае у меня была только одна версия CRT в качестве зависимости. С несколькими версиями это становится сложным.
Cristian Adam 13.10.2009 15:04:15

Вы должны изменить / обновить ресурс манифеста из DLL.

mt.exe -inputresource:dll_with_manifest.dll;#1 -out:old.manifest
mt.exe -manifest new.manifest -outputresource:dll_with_manfiest.dll;#1

Иногда тип ресурса RT_MANIFEST (тип 24) не имеет индекса # 1 в таблице ресурсов, вы должны использовать средство просмотра ресурсов ( ResourceHacker или ResEdit ) и узнать номер индекса. Я видел случаи, когда манифест имеет номер индекса № 2.

1
13.10.2009 12:30:00
Я попробовал - у dll, похоже, нет манифеста. Пожалуйста, смотрите изменения в моем сообщении.
RED SOFT ADAIR 13.10.2009 12:00:33