2011-11-04 63 views
3

这里是我的困境:如何将程序集加载到具有不同目标框架的独立应用程序域中?

的问题

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

显然,MainProgram正在加载SubProgram并使用.NET 4.0运行它。这导致known issue with System.Data.SQLite

现在,我已经研究并尝试了SQLite问题的所有建议修复,并且唯一工作的是更新到使用.NET 4.0编译的System.Data.SQLite程序集(请参阅.NET 4.0版,网址为this link)。

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

问题(S)

  1. 是否有指定MainProgram(主程序)加载和运行子程序使用.NET 2.0的方式?在设置应用程序域时可能有些事情?到目前为止,我找不到任何东西。

  2. 有没有另一种解决方案?

+1

不,只有在自定义托管方案中才有可能。你可能不会提前做出[ComVisible]。与那些制定规则的人交谈,我们无法帮助你。 –

回答

2

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

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

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

相关问题