虽然我已经看到一些关于在较新的CLR 4.0应用程序中使用旧CLR 2.0组件的讨论,但是如何处理相反的情况呢?
例如,如果一个人在.Net 2.0中有一个遗留应用程序,并希望利用一个充分利用CLR 4.0版本的新业务逻辑,那么如何在其中引用更新的组件呢?遗留应用程序并访问它的方法?如果遗留应用程序位于.Net 1.1中,那么同样的方法会起作用吗?
(附录为清晰起见)
虽然升级是理想的,但仍存在边缘情况,这可能是技术或政治限制。
答案 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