【发布时间】:2021-03-29 06:21:48
【问题描述】:
我遇到过这样一种情况,即应用程序具有一个或多个 dll 的多个(不兼容)版本。
app.exe
a.dll // v3.0
...
plugins/foo/foo.dll
plugins/foo/a.dll // v4.0
plugins/foo/...
在此示例中,app.exe 依赖于 a.dll v3.0,foo.dll 依赖于 a.dll v4.0。由于我的 exe 旁边的search order of LoadLibrary a.dll v3.0 先加载,然后由于它已经在内存中,所以跳过后面的 v4.0。
假设我不能:
- 重命名依赖的dll(本例中为
a.dll) - 修改
app.exe或foo.dll以将它们升级/降级为通用a.dll版本
有没有办法加载同名 dll 的多个版本来解决这个问题?我看到了关于 AppDomain 的 this answer,但那是针对托管 C# 应用程序的,我的用例是本机 C++ dll。
【问题讨论】:
-
这里当然标明了DLL名称中包含版本号,请楼主帮忙。否则,您将不得不与an assembly manifest 争吵。
-
感谢@HansPassant 在那里搜索现在让我陷入了Isolated Applications and Side-by-side Assemblies 的兔子洞,乍一看听起来很有希望。我会做一些挖掘,看看是否可以解决这个用例。
-
另一个兔子洞是延迟加载的库和通知挂钩 (example)。但必须能够修改一些东西。