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

时间:2010-10-23 00:22:55

标签: .net clr

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

例如,如果一个人在.Net 2.0中有一个遗留应用程序,并希望利用一个充分利用CLR 4.0版本的新业务逻辑,那么如何在其中引用更新的组件呢?遗留应用程序并访问它的方法?如果遗留应用程序位于.Net 1.1中,那么同样的方法会起作用吗?

(附录为清晰起见)

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

3 个答案:

答案 0 :(得分:3)

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

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

然而,这有许多缺点 - 包括大量增加的复杂性和降低的性能。

答案 1 :(得分:0)

您应该在.Net 4.0上定位旧的.Net 1.1或2.0应用程序 - 因为目标机器无论如何都需要安装.Net 4.0才能使用.Net 4.0组件,因此定位您的目标没有任何优势应用于.Net 2.0。

答案 2 :(得分:0)

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

检查this评论:

  

假设我有你在视频中提到的隔离级别,是否可以加载到托管clr2应用程序clr4运行时进程内SxS(反之亦然)?如果是的话,我该怎么办?他们的任何托管api我都要打电话吗?或者我需要来一层或者其他东西然后为我加载另一个clr?他们可以查看beta1的任何样本吗?


  

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

     

我知道我们已经有了一些代码示例,但我认为它们尚未发布。密切关注CLR团队博客的SxS类别。最简单的方法是使用一个版本的.NET构建托管COM组件,然后使用来自另一个.NET版本的COM-interop实例化它,就像没有SxS一样。查找用于构建和使用.NET 2.0的COM组件的任何示例。

     

我希望这有帮助,Rick

相关问题