记dynamic的一个小坑 -- RuntimeBinderException:“object”未包含“xxx”的定义
2014-09-30 16:56
162 查看
创建一个控制台程序和一个类库, 在控制台创建一个匿名对象,然后再在类库中访问它,代码如下:
编译没有问题,但是运行时会提示
“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的未经处理的异常在 System.Core.dll 中发生
其他信息: “object”未包含“Id”的定义
Id属性是肯定存在的,那问题出在哪呢?
让我们用ILDasm查看程序,会发现其实声明的匿名类型是internal级别的。
而internal只能只有在同一程序集中访问。在运行时,dynamic想找到另一个程序集中的internal类型的属性,自然会报错。
知道了原因,解决起来就很简单了,只需要在当前程序集的AssemblyInfo.cs中加上
指定对指定程序集可见即可。
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 ClassLibrary1 { public class TestClass { public void Test(dynamic obj) { Console.WriteLine(obj.Id); } } }
编译没有问题,但是运行时会提示
“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的未经处理的异常在 System.Core.dll 中发生
其他信息: “object”未包含“Id”的定义
Id属性是肯定存在的,那问题出在哪呢?
让我们用ILDasm查看程序,会发现其实声明的匿名类型是internal级别的。
而internal只能只有在同一程序集中访问。在运行时,dynamic想找到另一个程序集中的internal类型的属性,自然会报错。
知道了原因,解决起来就很简单了,只需要在当前程序集的AssemblyInfo.cs中加上
[assembly: InternalsVisibleTo("ClassLibrary1")]
指定对指定程序集可见即可。
相关文章推荐
- 记dynamic的一个小坑 -- RuntimeBinderException:“object”未包含“xxx”的定义
- <转>记dynamic的一个小坑 -- RuntimeBinderException:“object”未包含“xxx”的定义
- 记dynamic的一个小坑 -- RuntimeBinderException:“object”未包含“xxx”的定义
- RuntimeBinderException “object”未包含”xx”的定义
- 如何判断List<Object>中是否包含,一个有相同xxx某个属性实体类
- Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: “object”未包含“get_Range”的定义
- dynamic调用时报RuntimeBinderException:“object”未包含“xxx”的定义 错误
- C# dynamic类型报错:“object”不包含“xxx”的定义
- C#将数据导入到excel中 出现 “object”未包含“get_Range”的定义报错
- 在C#中的一个类型定义,可能包含的所有成员
- 如何引用一个已经定义过的全局变量 与 全局变量可不可以定义在可被多个.C文件包含的头文件中
- 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数
- 写入EXCEL “object”未包含“get_Range”的定义
- 定义一个包含私有成员变量和函数的类,再定义一个内部类,在内部类函数中访问外部成员变量,并调用外部函数。在外部类函数中创建内部类对象,调用内部类函数
- 简化版定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数
- VS2013中Winform导出Excel文件时报“object”未包含“get_Range”的定义解决方法
- C\C++小知识: 如何引用一个已经定义过的全局变量 与 全局变量可不可以定义在可被多个.C文件包含的头文件中
- xxx.dll: fatal error LNK1169:找到一个或多个重定义的符号
- (vs2008链接错误LK200x:xxx在yyy.obj中已定义或xxx在yyy中以被引用):一个全局的变量想在多个cpp文件中使用
- 代码练习在 C# 中得到一个 object (包含匿名对象)的属性和属性值