.NET 4 和 .NET 4.6.2 之间的表达式主体差异

Expression Body Differences Between .NET 4 and .NET 4.6.2

我的团队正在将应用程序从目标 .NET 4.0 升级到 4.6.2。是的,派对迟到了,但迟到总比不到好。

在我们的应用程序中,有一个扩展方法 returns 来自表达式的 returned 方法的 MethodInfo。换句话说,如果我们有:

public class Foo
{
    public void DoSomething() { }
}

然后有一个表情

Expression<Func<Foo, Action>> = f => f.DoSomething;

然后我们的扩展方法将 return DoSomething() 方法的 MethodInfo

该代码在 .NET 4.0 中运行良好,但在 .NET 4.6.2 中不起作用。我已经更改了代码以使其正常工作,但我的问题是有人知道 .NET 4.5、4.5.1、4.5.2、4.6、4.6.1 和 4.6.2 的发行说明中的​​哪个位置会对此进行记录吗?我已经多次阅读和搜索它们,但没有任何内容。

这些是我一直在浏览的发行说明:

调试时比较局部变量,可以看出.NET 4.0 和 4.6.2 表达式的方法体有何不同:

.NET 4.0:

.NET 4.6.2:

我知道 .NET 引入了执行此操作的方法;我感兴趣的是更改记录在何处,而不是解决方案(我已经有了)。

提前感谢我们的帮助!

.NET 4.5 引入了编译器使用的 MethodInfo.CreateDelegate() 方法,而不是 Delegate.CreateDelegate()

C# 表达式的记录行为

Expression<Func<Foo, Action>> e = f => f.DoSomething;

是它将创建一个表示 Func<Foo, Action> 的表达式,如果编译和调用它将采用 Foo 和 return 一个调用 [=16= 的 Action ] 在那 Foo 上。这种行为没有改变。由于记录的行为没有变化,所以很可能没有关于变化的文件。 (如果已知此类更改会导致问题,则会记录此类更改,但并非总是如此)。