我目前正在为第 3 方 WindowsForms 应用程序开发一个插件,它将与其他插件共存。请注意,我无法控制基础应用程序使用的源或文件(是 dll 文件、配置文件等),也无法控制可能在运行时加载的其他插件。
让我们想象一下,当其他插件之一在我的之前加载时,加载了对库 A(“A.dll”)的 1.0 版的依赖项。如果我的插件尝试加载库 A(也称为“A.dll”)的 2.0 版,我会立即收到经典的“System.IO.FileLoadException”。
在深入了解依赖 hell 这个主题之后,我看到了几个选项(比如 here 或 here )。然而,所有这些选项似乎都集中在独立应用程序上,开发人员通常可以完全控制这些应用程序,这些应用程序需要加载同一库的两个版本(可能是为了遗留支持或任何其他奇怪的原因)。由于插件环境,这些解决方案似乎不适用于我的情况。此外,他们通常需要:
- 在 GAC 中插入一个程序集,AFAIK 需要最终用户机器上的管理权限,而我没有;
- 控制我没有的基本应用程序的配置文件 (*.exe.config)。
谁能帮我想出一种方法来使用新版本的库,该库也被另一个插件用作旧版本,请记住我描述的限制?
最佳答案
如果您自己提供库 A.dll 版本 2.0,您可以将其重命名为 A.2.0.dll 并引用它。
关于c# - .NET (C#) 应用程序插件的依赖 hell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58412129/