在过去的几周里,我一直试图破解这个,但还没有找到一个好的解决方案; 希望我能在这里得到答案.
我有两个程序集(ZA和ZB),它们都指向一个公共项目/ dll(ZC)但可能在不同的版本上(即相同的dll名称,相同的名称空间,某些类可能不同).然而,如果一个程序集在运行时由另一个程序集加载(例如A加载B),那么每个程序集都可以自行工作,那么我就无法使它工作.需要一些帮助.
这是设置:
ZA需要在运行时加载需要在ZB(依赖于ZC)中加载某些东西.
ZA是主应用程序.在它的bin目录下,有一个插件目录plugins/plugin-ZB,我希望在其下放置所有ZB及其依赖项(ZC).
这是我到目前为止所尝试的:
Assembly.Load() 使用相同版本的DLL - 工作正常.
Assembly.Load() 使用不同版本的dll - ZB加载,但是当方法运行时,我得到一个找不到异常的方法.
AppDomain.Load()找不到文件错误; 我甚至使用委托来解决程序集.
关于ZC的一些细节: - 一些方法是公共静态(有些方法不是).例如Log.Log("hello");
- 有些可能返回值(基元或对象). - 某些方法是非静态的(和返回值).
救命? - TIA
除了 Jonathan Allen 的出色建议之外,解决问题的更“经典”方法是在 2 个不同的 AppDomanis 中加载 2 个版本。然后,您可以使用 .NET Remoting 使两个 AppDomain 进行通信。所以ZA应该创建一个新的Appdomain,在这个AppDomain中加载ZB并通过Remoting调用ZB中的一些操作。
请注意,.NET Remoting 对您要使用的类有一些要求(从 MarshalByRef 继承),并且创建 AppDomain 是一项昂贵的操作。
希望这有帮助
| 归档时间: |
|
| 查看次数: |
4392 次 |
| 最近记录: |