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

时间:2011-11-04 18:41:19

标签: c# .net-4.0 .net-2.0 appdomain system.data.sqlite

这是我的困境:

问题

  1. 我有SubProgram(一个DLL),它使用System.Data.SQLite并且都编译为.NET 2.0
  2. 我的MainProgram(EXE)编译为.NET 4.0
  3. 我的MainProgram将SubProgram加载到一个单独的应用程序域并与代理进行通信
  4. 显然,MainProgram正在加载SubProgram并使用.NET 4.0运行它。这会导致known issue with System.Data.SQLite

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

    这将解决我的问题,只有我们有一套严格的发布规则,并且不会以任何方式释放SubProgram或它的依赖项,因此SubProgram使用的System.Data.SQLite DLL必须保留为当前的.NET 2.0版本

    问题(S)

    1. 有没有办法指定MainProgram加载并使用.NET 2.0运行SubProgram?设置应用领域时可能会有什么问题?到目前为止,我找不到任何东西。

    2. 还有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

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

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

如果您将SubProgram更改为一个单独的进程,并在两者之间添加一个Remoting通道,那么考虑到您在释放时的其他限制,这应该是一个合理的方法。