【发布时间】:2019-10-16 11:22:40
【问题描述】:
我目前正在为第 3 方 WindowsForms 应用程序开发一个插件,它将与其他插件共存。请注意,我无法控制基础应用程序使用的源或文件(例如 dll 文件、配置文件等),也无法控制可能在运行时加载的其他插件。
让我们想象一下,在我之前加载的其他插件之一加载了对库 A 的 1.0 版(“A.dll”)的依赖项。如果我的插件尝试加载库 A 的 2.0 版(也称为“A.dll”),我会立即看到经典的“System.IO.FileLoadException”。
在深入了解依赖地狱的主题后,我看到了一些选项(例如 here 或 here )。然而,所有这些选项似乎都集中在独立应用程序上,开发人员通常可以完全控制这些应用程序,这需要加载同一库的两个版本(可能是出于遗留支持或任何其他奇怪的原因)。由于插件环境,这些解决方案似乎不适用于我的案例。此外,他们通常要求:
- 在 GAC 中插入程序集,AFAIK 需要在最终用户的计算机上具有管理权限,而我没有;
- 控制基础应用程序的配置文件 (*.exe.config),我没有。
谁能帮我找出一种方法来使用一个新版本的库,该库也被另一个插件用作旧版本,记住我描述的限制?
【问题讨论】:
标签: c# .net winforms plugins dependency-management