C# dynamic类型报错:“object”不包含“xxx”的定义

一、起因:

最近在做的一个项目,因为很多地方要用到同一套流程。为了后期维护,要求将共用流程进行抽离,创建为一个公用的类库。在抽离之前程序运行是没有问题的,然而在抽离之后就得到了如题错误: object不包含xxx的定义。 遇到这个错误时也是相当的郁闷,根本就觉得莫名奇妙,完全相同的代码,只是拿出来以类库的形式调用而已。

 

二、查找:

遇到问题总得想法子解决,接下来就是进行调试,调试下来就更是摸不着头脑。来看下面的两张截图。看到图一的错误,立即对products进行了监视,看到的结果却是图二这样的(哎呀,这不明明有IsOk属性吗?什么鬼...)。由于完全没有思路,无从下手,于是开始了面向百度编程,找到了这个bug的原因。

                             (图一)

 

 

                             (图二)

 

三、解决:

原来是匿名类型在编译后,访问修饰符是internal级别的,当跨程序集访问时就会出现如题错误(apiTL.ProductList()返回的是一个匿名类型)。这也就是为什么在抽离前程序运行是正常的(因为在同一程序集中),而抽离后报错的原因。知道了原因,就来解决它。

 

示例:

程序集A(匿名对象所在的程序集);程序集B(调用程序集A的方法,接收匿名对象)。那么只需要在 程序集A 的AssemblyInfo.cs中加上如下语句,意思是对指定的程序集可见(既:对程序集B可见)

[assembly: InternalsVisibleTo("程序集B")]

 

转载于:https://www.cnblogs.com/similar/p/6716320.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值