【问题标题】:Is it possible to load two versions of the .NET runtime in the same process?是否可以在同一进程中加载​​两个版本的 .NET 运行时?
【发布时间】:2008-10-14 15:32:01
【问题描述】:

我需要澄清两种情况:

  1. 使用 .NET 3.5 编译的可执行文件需要使用使用 .NET 1.1 编译的库,并且该库必须在 1.1 运行时上运行。

  2. 使用 .NET 1.1 编译的可执行文件需要使用使用 .NET 3.5 编译的库。

我找不到可靠的消息来源,说明无法加载两个版本的 .NET 运行时,而且 Microsoft 的文档在此问题上非常含糊。

【问题讨论】:

    标签: .net runtime versioning clr-hosting


    【解决方案1】:

    不——您不能将 CLR 加载到同一个进程中两次。请参阅CLR Hosting 的文档

    与早期版本一样 运行时,CorBindToRuntimeEx 函数初始化运行时。你 可以选择哪个版本的 运行时加载,但进程可以 仅托管一个版本

    【讨论】:

    • 如果您使用的是 .Net 4.0 托管 API 而不是 .Net 2.0 托管 API,则可以...
    【解决方案2】:

    .NET 4 承诺通过In-Process Side by Side 在同一进程中托管不同的 CLR 版本。

    【讨论】:

      【解决方案3】:

      对于案例 #1,是否有任何特殊原因(例如,重大更改)需要将库托管在 1.1 运行时中?是否可以通过 1.1 编译的 Web 服务公开库,并让可执行文件指向 Web 服务? (或者其他一些远程技术,让库在自己的进程中?)

      对于案例 #2,是否可以在 2.0/3.5 下重新编译 1.1 应用程序,使其可以驻留在同一进程中?

      无论如何,Rob Walker 是对的(我赞成)——您根本不能在同一个进程中托管 2 个版本的运行时。所以你需要以某种方式解决它。我想在这两种情况下,源代码都必须可用,因此应该重新编译和重新测试。

      【讨论】:

      • 约翰,你是对的,我们将不得不解决它,因为更改代码是不可取的。我只是想确保我们没有忽略更简单的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      相关资源
      最近更新 更多