关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException

  

关于Microsoft.CSharp.RuntimeBinder.RuntimeBinderException的异常一般来自于两种,

第一种:

Predefined type 'Microsoft.CSharp.RuntimeBinder.Binder' is not defined or imported

解决它的办法是,直接在项目引用中添加 Micorsoft.Csharp 就可以了。

第二种:

an exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'

引起这种异常的错误是因为匿名类型是不能跨程序集(assembly)的,第一种解决办法是使用 Expando ,第二个办法是在源程序集的AssemblyInfo.cs中加入:

[assembly: InternalsVisibleTo("NameSpace1.SubNameSpace1")]

使用第二种方法后,匿名类型可以传递到目标程序集。

 

编译没有问题,但是运行时会提示

“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的未经处理的异常在 System.Core.dll 中发生 

其他信息: “object”未包含“Id”的定义

Id属性是肯定存在的,那问题出在哪呢?

让我们用ILDasm查看程序,会发现其实声明的匿名类型是internal级别的。

而internal只能只有在同一程序集中访问。在运行时,dynamic想找到另一个程序集中的internal类型的属性,自然会报错。

知道了原因,解决起来就很简单了,只需要在当前程序集的AssemblyInfo.cs中加上

[assembly: InternalsVisibleTo("ClassLibrary1")]  

指定对指定程序集可见即可。

posted on 2016-07-21 19:46  LM·Q  阅读(808)  评论(0编辑  收藏  举报

导航