记dynamic的一个小坑 -- RuntimeBinderException:“object”未包括“xxx”的定义
一个 -- 定义 object 包括 xxx Dynamic
2023-09-11 14:14:59 时间
创建一个控制台程序和一个类库, 在控制台创建一个匿名对象。然后再在类库中訪问它。代码例如以下:
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")]
指定对指定程序集可见就可以。
相关文章
- 实例--post请求,完成一个抽奖程序概率的测试
- Node.js -- Router模块中有一个param方法
- mysql数据库使用mysqldump工具针对一个数据库备份,使用--databases选项与不使用该参数的区别
- 1 时间戳 2 C# 如何生成一个时间戳 3 js 时间加一分钟... 4 js string->date 5 js 取得当天0点 / 23:59:59 时间
- 利用一个继电器来实现脚踏鼠标按钮
- 复盘:设A是m*n的矩阵,A^T是A的转置,如果n1,n2...nt是齐次方程Ax=0的一个基础解,请问A的秩r(A)等于多少
- 一个“老“测试/开发程序员的独白......
- 一个将字符串转换为整数的函数--atoi()
- Linux 基础:如何在Ubuntu上检查一个软件包是否安装
- vue-multi-tab--一个让你在SPA里使用多页签的框架页
- 使用LinkedHashMap来实现一个使用LRU(Least Recently Used)算法的cache
- Vue--一个页面实现多个同级组件---命名视图实现经典布局(头部,左右布局)
- vue--自定义标签属性--用于多个事件共同引用一个组件--但是两个事件要实现的功能不同-避免冲突
- v8引擎详解(摘)-- V8引擎是一个JavaScript引擎实现
- 另一个角度的redis--redis 可以看做是c/s架构的软件
- moand的编程学形式:一个(高阶)类型包办程序的组织--类型关乎复合
- 为什么一定要调用 setlocale 呢? 因为在 C/C++ 语言标准中定义了其运行时的字符集环境为 "C" ,也就是 ASCII 字符集的一个子集。使用setlocal改变整个应用程序的字符集编码方式(wcstombs使用前要设置 setlocale (LC_ALL, "chs"); )
- 一个编译可执行jar包 jar包中不包含resources下config.properties且可以读到config.properties文件且classpath中有当前路径的pom
- 做了一个可定制的英文记忆字典 - RDict
- 做一个略调皮的个人主页--结构篇
- 分享一个开源的流程图绘制软件--Diagram Designer
- spring-framework-3.2.4.RELEASE 综合hibernate-release-4.3.5.Final一个错误Caused by: java.lang.NoClassDefFound
- IOS开发之Bug--遇到一个类型不确定的bug
- IOS开发之小实例--创建一个简单的用于视频录制和回放的应用程序
- 匆忙--一个大龄十年老程序员战战兢兢的应对中年危机的2019年总结与2020年展望
- VUE 爬坑之旅 -- 用 ES6 语法写一个工具类,并全局引用
- python面试题--判断一个字符串中的括号“(”“)”是否成对出现
- js定义了一个null或者""的变量,但是后端接收不到对应的值