代码之家  ›  专栏  ›  技术社区  ›  Bob Palmer

如何在clr 1.1或2.0应用程序中使用clr 4.0组件?

  •  4
  • Bob Palmer  · 技术社区  · 14 年前

    虽然我已经看到一些关于在新的clr 4.0应用程序中使用旧的clr 2.0组件的讨论,但是如何处理相反的情况呢?

    例如,如果在.NET 2.0中有一个旧的应用程序,并且想要利用一个新的业务逻辑来充分利用clr的4.0版本,那么如何在旧的应用程序中引用新的组件并访问它的方法呢?如果旧版应用程序在.NET 1.1中,同样的方法是否也可以工作?

    为清楚起见的附录

    虽然升级是理想的,但仍然存在一些边缘情况,这些情况可能是技术或政治上的限制。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Reed Copsey    14 年前

    通常,您应该将旧应用程序升级为使用.NET 4。代码 应该 不需要更改。

    否则,处理此问题的主要支持方法是通过COM互操作。可以标记.NET 4类 [ComVisible] ,然后可以构造互操作程序集以在旧的.NET版本中“使用”它。

    然而,这有许多缺点——包括增加了许多复杂性和降低了性能。

        2
  •  0
  •   Justin    14 年前

    您应该将旧的.NET 1.1或2.0应用程序目标改为.NET 4.0,因为目标计算机仍需要安装.NET 4.0才能使用.NET 4.0组件,因此将应用程序目标定为.NET 2.0没有真正的优势。

        3
  •  0
  •   Nick Martyshchenko    14 年前

    看看 Rick Byers and Simon Hall: CLR 4 - Side-by-Side In-Process - What. How. Why.

    检查 this 注释:

    假设我有您在视频中提到的隔离级别,是否可以将进程sx中的clr4运行时加载到托管clr2应用程序(反之亦然)?如果是,我该怎么办?我必须调用他们的任何托管API吗?或者我需要come层或者其他什么东西来为我加载另一个clr?他们的beta1有什么样品可以让我看看吗?


    CLR加载实际上是通过本机API发生的事情,可以直接使用宿主API(如iclrmetahost),也可以通过COM间接进行。通过使用.NET的互操作工具,可以在托管代码中执行此操作(不需要实际编写任何本机代码)。所以是的,您可以编写在加载了clr v4的clr v2中运行的代码,反之亦然。

    我知道我们有一些代码示例在工作,但我认为它们还没有发布。关注clr团队博客的sxs类别。最简单的方法是使用一个.NET版本构建托管COM组件,然后使用另一个.NET版本的COM互操作来实例化它,就像不使用SXS时一样。查找用于构建和使用带有.NET 2.0的COM组件的任何示例。

    我希望这有帮助,瑞克