如何将程序集加载到具有不同目标框架的单独应用程序域中
本文关键字:框架 目标 单独 应用程序域 程序集 加载 | 更新日期: 2023-09-27 18:13:37
我的困境是:
问题- 我有子程序(DLL),使用System.Data.SQLite,两者都编译为。net 2.0
- 我的主程序(EXE)被编译成。net 4.0
- 我的主程序加载子程序到一个单独的应用程序域,并与代理通信
显然,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)
是否有一种方法可以指定主程序使用。net 2.0加载和运行子程序?也许是在设置应用程序域的时候?
有其他解决方案吗?
唯一能够做到这一点的方法是使用跨进程通信,而不是跨appdomain。
给定应用程序的所有appdomain仍然在同一进程中运行,因此必须在相同的根CLR上下文中运行(以及相同的。net运行时)。但是,. net Remoting技术通常提供跨AppDomain边界的代理通信和封送,也适用于跨进程通信,只需少量修改。
如果您将SubProgram更改为单独的进程,并在两者之间添加Remoting通道,那么考虑到有关释放的其他约束,这应该是一种合理的前进方式。