博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记dynamic的一个小坑 -- RuntimeBinderException:“object”未包括“xxx”的定义
阅读量:6265 次
发布时间:2019-06-22

本文共 832 字,大约阅读时间需要 2 分钟。

创建一个控制台程序和一个类库, 在控制台创建一个匿名对象。然后再在类库中訪问它。代码例如以下:

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类型的属性,自然会报错。

知道了原因,解决起来就非常easy了,仅仅须要在当前程序集的AssemblyInfo.cs中加上

[assembly: InternalsVisibleTo("ClassLibrary1")]

指定对指定程序集可见就可以。

转载地址:http://rddpa.baihongyu.com/

你可能感兴趣的文章
Java虚拟机工作原理详解 ( 二 )
查看>>
对象的序列化(Serialization)
查看>>
理解 Glance - 每天5分钟玩转 OpenStack(20)
查看>>
编译pure-ftpd时提示错误Your MySQL client libraries aren't properly installed
查看>>
Impala SQL
查看>>
STL源代码分析--萃取编程(traits)技术的实现
查看>>
Linux ALSA声卡驱动之一:ALSA架构简介【转】
查看>>
为了解决linux配置Nginx 只能关闭防火墙才能访问的问题
查看>>
CentOS7.2 创建本地YUM源和局域网YUM源
查看>>
ubuntu设置root密码及 Xftp连接linux(ubuntu)时提示ssh服务器拒绝了密码,请再试一次...
查看>>
[转]WCF RIA Services
查看>>
R的绘图实例集锦
查看>>
How do you select a particular option in a SELECT element in jQuery? - Stack Overflow
查看>>
emacs 快捷键设置 基础知识篇
查看>>
艾伟:C# 4.0下的新特性
查看>>
Android ROM开发--ubuntu下编译CyanogenMod生成SDK
查看>>
Cocos2d下TexturePacker2.3版会给iphone, ipad通用版带来的问题
查看>>
全新的互动广告牌,待遇男女有别
查看>>
Language modeling meets inference networks
查看>>
mvc3学习之--安装
查看>>