我们包含一个第三方lib + DLL,最近在安装时引发了很多麻烦。使用dependencywalker,我们发现,DLL本身是指SidBySide:第三方DLL指的是两个版本的MSVCR80.DLL
MSVCR80.DLL:
Version 8.0.50727.4053 and
Version 8.0.50727.42
alt text http://img101.imageshack.us/img101/1734/dependencywalk2.jpg
在大多数情况下,安装是没有问题的两个不同的版本,即使我们没有发布两个版本的。但在很多情况下,我们的安装不会启动。然后,我们在SideBySide管理器的windows系统事件日志中查找消息:“DLL的版本不匹配”。在大多数情况下,这个问题可以通过安装.NET框架来解决(虽然我们不使用这个)。但是现在我们遇到了这种情况,这没有帮助。
我知道一个解决方案是将两个版本都作为共享程序集安装,但这似乎并不容易,而且我更喜欢更简单的解决方案。有人知道解决方法吗?
我可以以某种方式只使用一个版本的Dll吗?
编辑: 我现在试着cristians建议:
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的依赖,我看到以下内容: alt text http://img340.imageshack.us/img340/4122/dependencywalk3.jpg
下MSVCR80.DLL是一个版本... 42。我不明白这一点。为什么MSVC P 80.DLL指的是MSVC的另一版本R 80.DLL除了它之外。这可能是依赖行者的问题吗?
我真的联系第三方lib制造商,并要求他们只使用其中的一个版本! – stijn 2009-10-13 12:04:41