gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:15:27 27 4
gpt4 key购买 nike

这是我的困境:

问题

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

显然,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版本。

问题

  1. 有没有办法指定 MainProgram 使用 .NET 2.0 加载和运行 SubProgram?也许在设置应用程序域时有些事情?到目前为止我找不到任何东西。

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

最佳答案

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

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

如果您将 SubProgram 更改为一个单独的进程,并在两者之间添加一个 Remoting channel ,考虑到您对发布的其他限制,这应该是一种合理的前进方式。

关于c# - 如何将程序集加载到具有不同目标框架的单独应用程序域中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8014243/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com