【问题标题】:How do I load assemblies into separate app domains with different target frameworks?如何将程序集加载到具有不同目标框架的单独应用程序域中?
【发布时间】:2011-12-22 06:57:27
【问题描述】:

这是我的困境:

问题

  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 程序集(请参阅this link 处的 .NET 4.0 版本) .

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

问题

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

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

【问题讨论】:

  • 不,这仅在自定义托管方案中才有可能。通过使其成为 [ComVisible],您可能不会领先。和制定规则的人谈谈,我们帮不了你。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    相关资源
    最近更新 更多