HTML5技术

爆一个VS2015 Update1更新带来的编译BUG【已有解决方案】 - 郭明锋(2)

字号+ 作者:H5之家 来源:博客园 2016-04-02 10:00 我要评论( )

反正,我是在这当中纠结到吐血,一度以为是实体设计的问题(在实际项目中,实体设计当然要比上面这个要复杂得多得多,排查问题的难度要大得多),后来,无意中查看到了反编译的代码,才揪出了罪魁祸首,下面来对比V

反正,我是在这当中纠结到吐血,一度以为是实体设计的问题(在实际项目中,实体设计当然要比上面这个要复杂得多得多,排查问题的难度要大得多),后来,无意中查看到了反编译的代码,才揪出了罪魁祸首,下面来对比VS2015 Update1与VS2015两个编译器对上面的 Unlocked 扩展方法的编译:

原生 VS2015 编译

VS2015 Update1编译

由上面的反编译代码可看到,VS2015 Update1的编译结果多了个强制转换,但这种强制转换在Linq To Entities中是无法支持的,因而报了

无法将类型“RoslynBugShow.TestModel”强制转换为类型“RoslynBugShow.ILockable”。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。

这个异常。

问题上升到编译器的高度了,已经不是我们这些平民小码农能解决的了,只能期待微软在VS2015的下一个更新中能解决掉。

解决方案

果然还是园子中牛人多,29楼的@Choo 提供的一个解决方案完美解决了这个问题

扩展方法的泛型类型添加一个 class 限制,VS2015 Update1 与VS2015编译的结果完全一致,问题圆满解决!

 

演示代码下载:RoslynBugShow.rar

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Dora.Interception: 一个为.NET Core度身定制的AOP框架 - Artech

    Dora.Interception: 一个为.NET Core度身定制的AOP框架 - Artech

    2017-05-02 11:00

  • 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

    【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

    2017-04-30 16:00

  • 【CSS】如何用css做一个爱心 - 只会修电脑的程序猿

    【CSS】如何用css做一个爱心 - 只会修电脑的程序猿

    2017-04-18 11:00

  • VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug - 雲霏霏

    VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug - 雲霏霏

    2017-04-07 16:01

网友点评
>