【发布时间】:2010-11-07 16:26:03
【问题描述】:
我有一个项目,其中包含预构建的 Dll 模块,它是在过去一段时间使用 Visual Studio 9 构建的。
项目的 EXE 现已构建,使用 Visual Studio 9 的 SP1。
当我们部署 EXE 时,我们不希望需要管理访问权限,因此 C-Runtime 已捆绑到应用程序的根目录中。 Dll:MSVCRT90.DLL 及其清单:Microsoft.VC90.CRT.manifest
现在,EXE 和最新版本的运行时清单都一致了 - 应用程序清单要求 msvcrt.dll 的 9.0.30729.1,crt-manifest 包含确认 msvcrt90.dll 版本为 9.0.30729.1 的条目
现在,一个问题。我们的应用程序使用的第 3 方 DLL 库与原始 msvcrt90.dll 版本 9.0.21022.8 相关联,并且具有此效果的内部清单。
在安装了两个版本的 VS9 CRuntime 的开发 PC 上,该应用程序可以正常工作。在我们首次安装应用程序的“新”PC 上 - DLL 无法加载。
现在,我可以做一些作弊 - 一个是将应用程序恢复到 9.0.2 - 从原始源媒体中获取 9.0.2 DLL。这是不可取的,因为 9.0.3 更可取。 或者我非常努力地重建 3rd 方库。
我还非常确定,在我们的开发 PC 上,当第 3 方库请求旧 dll 时,它会被重定向到新 dll - 它们是二进制兼容的。
应用程序清单和程序集旨在将我们所有人从这种垃圾中拯救出来。 必须可以编辑程序集清单文件,以便 exe 和 dll 都可以加载。
【问题讨论】:
标签: windows unmanaged side-by-side