养浩然之气,做博学之人
创建一个项目和一个类库, 在类库创建一个匿名对象,然后再在项目中访问它时报错:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException类型的未经处理的异常在 System.Core.dll 中发生其他信息: “object”未包含“Id”的定义
属性是肯定存在的,那问题出在哪呢?找了一晚上终于搞定。
原因:匿名类型是internal级别,而internal只能只有在同一程序集中访问。在运行时,dynamic想找到另一个程序集中的internal类型的属性,自然会报错。
namespace Test.A { class Program { static void Main(string[] args) { var obj = new { Id = 1 }; var c = new ClassLibrary1.TestClass(); c.Test(obj); Console.ReadLine(); } } }
namespace Test.B { public class TestClass { public void Test(dynamic obj) { Console.WriteLine(obj.Id); } } }
项目A命名空间 Test.A 匿名类型所在
项目B命名空间 Test.B
在Test.B 中通过dynamic关键字调用Test.A中匿名类型时报上述错误
解决办法:
在项目A的AssemblyInfo.cs中加上:
[assembly: InternalsVisibleTo("Test.B")]
解决方法二
将匿名类转换成实体类
参考:
https://blog.csdn.net/feiyun0112/article/details/39697955
http://www.cnblogs.com/ywkpl/p/4724986.html
编辑:孙小北
本文地址: https://www.xiaowangyun.com/wyblog/detail/?id=242
版权归属: www.xiaowangyun.com 转载时请以链接形式注明出处
0 条评论