如何将程序集加载到具有不同目标框架的单独应用程序域中

本文关键字:框架 目标 单独 应用程序域 程序集 加载 | 更新日期: 2023-09-27 18:13:37

我的困境是:

问题


  1. 我有子程序(DLL),使用System.Data.SQLite,两者都编译为。net 2.0
  2. 我的主程序(EXE)被编译成。net 4.0
  3. 我的主程序加载子程序到一个单独的应用程序域,并与代理通信

显然,MainProgram正在加载子程序并在。net 4.0中运行它。这将导致System.Data.SQLite的一个已知问题。

现在,我已经研究并尝试了所有针对SQLite问题的建议修复,唯一有效的是更新到使用。net 4.0编译的System.Data.SQLite程序集(见。net 4.0版本)。

这将解决我的问题,只有我们有一套严格的发布规则,不以任何方式发布子程序或它的依赖项,因此子程序使用的System.Data.SQLite DLL必须保持为当前的。net 2.0版本。

问题(s)

  1. 是否有一种方法可以指定主程序使用。net 2.0加载和运行子程序?也许是在设置应用程序域的时候?

  2. 有其他解决方案吗?

如何将程序集加载到具有不同目标框架的单独应用程序域中

唯一能够做到这一点的方法是使用跨进程通信,而不是跨appdomain。

给定应用程序的所有appdomain仍然在同一进程中运行,因此必须在相同的根CLR上下文中运行(以及相同的。net运行时)。但是,. net Remoting技术通常提供跨AppDomain边界的代理通信和封送,也适用于跨进程通信,只需少量修改。

如果您将SubProgram更改为单独的进程,并在两者之间添加Remoting通道,那么考虑到有关释放的其他约束,这应该是一种合理的前进方式。