【问题标题】:Lazy Delegate Creator breaks when upgrading to .net 4.6.2Lazy Delegate Creator 在升级到 .net 4.6.2 时中断
【发布时间】:2018-09-02 09:14:20
【问题描述】:

我不确定从哪里开始,所以这个问题可能会随着我收到反馈而演变。也就是说,我正在将我们的项目升级到 .net 4.6.2。在更新了 nuget 包并解决了依赖问题之后,我终于可以构建了。但是,在启动期间,我现在遇到了一个我无法解决的异常。由于 null 值,异常稍后发生,但我已将问题跟踪到参数如何进入方法的更改。

这是参数不同的方法。参数expression 根据.net 版本的不同而不同。

public static IInterfaceNameChanged CreateScreenRule<TInstance>(Expression<Func<TInstance, ScreenRule>> expression)
    where TInstance : new()
{
    return CreateNewable(expression, null, RuleSetBase.RuleSetTypes.Req);
}

这是对 CreateScreenRule() 的调用:

RuleFactory.CreateScreenRule<VehicleDriverAssignment>(i => i.VehicleDriverAssignments)

以及我们正在尝试创建的方法的签名:

public void VehicleDriverAssignments(ScreenRuleContext args)
{...}

升级前: 表达式参数像这样进入方法:

i => Convert(CreateDelegate(RuleEngine.ScreenRule, i, Void VehicleDriverAssignments(RuleEngine.ScreenRuleContext)))

升级后: 它进入这样的方法:

i => 转换(无效 VehicleDriverAssignments(RuleEngine.ScreenRuleContext).CreateDelegate(RuleEngine.ScreenRule, i))

所有代码都没有改变,唯一改变的是升级和其他与升级相关的活动(nuget 升级、绑定重定向等)。

任何想法为什么升级 .net 会从根本上改变expression 的使用方式?

谢谢

【问题讨论】:

  • 委托是:public delegate void ScreenRule(ScreenRuleContext context);

标签: c# .net delegates lazy-initialization .net-4.6.2


【解决方案1】:

我想我可能已经找到了问题所在。看起来表达式主体在这些版本之间发生了变化。

Expression Body Differences Between .NET 4 and .NET 4.6.2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2020-05-13
    • 2022-08-08
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2016-05-02
    相关资源
    最近更新 更多