我有一个包含预构建 Dll 模块的项目,该模块是在过去一段时间内使用 Visual Studio 9 构建的。
现在使用 Visual Studio 9 的 SP1 构建项目的 EXE。
当我们部署 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 更可取。或者我非常努力地重建第 3 方库。
我还非常确定,在我们的开发 PC 上,当第 3 方库请求旧 dll 时,它会被重定向到新 dll - 它们是二进制兼容的。
应用程序清单和程序集旨在将我们所有人从这种垃圾中拯救出来。必须可以编辑程序集清单文件,以便 exe 和 dll 都可以加载。