【发布时间】:2009-06-07 07:35:43
【问题描述】:
在 .Net 3.5 对其编译成的 IL 没有任何更改之前,我已经听说过这种说法。仔细考虑了我所知道的所有编译器特性,事实上,它们似乎都可以在同一个旧 IL 中实现,但我找不到官方来源来证实这一说法。是真的吗?
【问题讨论】:
-
你问我为什么问?
-
补充问题:我知道4.0肯定有一个新的CLR,但是它有什么IL变化吗?
在 .Net 3.5 对其编译成的 IL 没有任何更改之前,我已经听说过这种说法。仔细考虑了我所知道的所有编译器特性,事实上,它们似乎都可以在同一个旧 IL 中实现,但我找不到官方来源来证实这一说法。是真的吗?
【问题讨论】:
我认为没有任何 IL 更改,但是在 CLR 实现中进行了重大更改,以使动态方法更有效,允许表达式树编译等。我似乎记得围绕构建动态方法的安全性发生了变化,以使生成表达式树的 lambda 表达式即使在相对低信任的环境中也可以调用私有方法来工作。编译器知道调用私有方法是有效的,因为编译源代码的点可以访问它。但证明这一点很棘手:) 请参阅 this note by Eric Lippert。
【讨论】:
自 .NET 2.0 以来,随附的 CLR(版本 2.0.50727)没有更改,因此您的 IL 是相同的。 (另见this SO QA)
【讨论】:
..因此,如果您愿意,您可以在 .NET 2.0 项目中使用大量 .NET 3.5 功能,只要您使用最新的编译器:
【讨论】: