关于异常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")]  

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

时间: 2024-12-29 06:44:43

关于异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException的相关文章

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: “object”未包含“get_Range”的定义

asp.net操作Excel合并单元格时,抛出了异常: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: "object"未包含"get_Range"的定义 在 CallSite.Target(Closure , CallSite , ComObject , Object , Object ) 在 System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,

(异常) Microsoft JScript 运行时错误: 'Sys.Extended.UI' 为空或不是对象.

我的错误形式 (异常) Microsoft JScript 运行时错误: 'Sys.Extended.UI' 为空或不是对象. 我的修改办法 把<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> 改为 <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1"

找不到编译动态表达式的一种或多种类型。是否缺少对microsoft.CSharp.dll和System.core.dll的引用”

xlbook1.Worksheets[1]这块下面显示红色的波浪号,并有提示“找不到编译动态表达式的一种或多种类型.是否缺少对microsoft.CSharp.dll和System.core.dll的引用”. 解决办法是将引入的COM对象(miscrosoft excel 12.0 object library),属性里的嵌入互操作类型改为Fasle

Microsoft.CSharp.CSharpCodeProvider

Microsoft.CSharp.CSharpCodeProvider MSDN 提供对 C# 代码生成器和代码编译器的实例的访问.类提供可用来检索 C# ICodeGenerator 和 ICodeCompiler 实现的实例的方法. 下面的示例使用 C# 或 Visual Basic 代码提供程序编译源文件.该示例检查输入文件扩展名并使用相应的 CSharpCodeProvider 或 VBCodeProvider 进行编译.输入文件被编译为可执行文件,并会在控制台上显示所有编译错误. pu

&quot;One or more types required to compile a dynamic expression cannot be found. Are you missing references to Microsoft.CSharp.dll and System.Core.dll?&quot;的解决方法

#事故现场: 在一个.net 4.0 的项目中使用dynamic,示例代码如下: 1 private static void Main(string[] args) 2 { 3 dynamic obj; 4 obj = new { name = "jack" }; 5 Console.WriteLine(obj.name); 6 } 在读取obj.name时,报错: One or more types required to compile a dynamic expression c

使用dynamic引发的异常:无法对 null 引用执行运行时绑定

今天上午运营反映有商户的账单没有生成. 查看日志,在批量生成账单服务执行过程中,因为如下异常而中断了: 跑批异常 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 无法对 null 引用执行运行时绑定 在 CallSite.Target(Closure , CallSite , Object ) 在 System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite si

记dynamic的一个小坑 -- RuntimeBinderException:“object”未包括“xxx”的定义

创建一个控制台程序和一个类库, 在控制台创建一个匿名对象.然后再在类库中訪问它.代码例如以下: namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var obj = new { Id = 1 }; var c = new ClassLibrary1.TestClass(); c.Test(obj); Console.ReadLine(); } } } namespace ClassL

记dynamic的一个小坑 -- RuntimeBinderException:“object”未包含“xxx”的定义

创建一个控制台程序和一个类库, 在控制台创建一个匿名对象,然后再在类库中访问它,代码如下: namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var obj = new { Id = 1 }; var c = new ClassLibrary1.TestClass(); c.Test(obj); Console.ReadLine(); } } } namespace ClassLib

C#编程总结(十四)dynamic

C#编程总结(十四)dynamic 介绍 Visual C# 2010 引入了一个新类型 dynamic. 该类型是一种静态类型,但类型为 dynamic 的对象会跳过静态类型检查. 大多数情况下,该对象就像具有类型 object 一样. 在编译时,将假定类型化为 dynamic 的元素支持任何操作. 因此,您不必考虑对象是从 COM API.从动态语言(例如 IronPython).从 HTML 文档对象模型 (DOM).从反射还是从程序中的其他位置获取自己的值. 但是,如果代码无效,则在运行