Csharp/C#教程:ReflectionTypeLoadException:Type正在尝试实现无法访问的接口分享


ReflectionTypeLoadException:Type正在尝试实现无法访问的接口

我正在使用Assembly.GetTypes()获取插件库中定义的所有类型(因此我可以实例化插件实例)。

在特定的库中,该方法引发ReflectionTypeLoadException,说:

Type  is attempting to implement an inaccessible interface 

谷歌搜索它似乎是因为特定的类型实现了非公共接口。 实际上它是,但Type嵌套在另一个公共类中,声明为private。

如何避免这种exception?

….

制作界面公共代码工作。 是否有可能定义这个奇怪的行为是一个bug(在Assembly.GetTypes()中)? 这意味着库类型无法实现受保护的交互面!

通过从公共类型中删除受保护的嵌套类型来解决该问题。

MessagePack序列化时遇到了同样的问题。 我试图在内部类中实现接口,所以它来自“程序集”MessagePack.Resolvers.DynamicObjectResolver,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null’这个exception试图实现一个不可访问的接口。“ 所以我把它的内部类从它的容器类中取出,在下面的相同命名空间中是我的前后代码…之前….

 using MessagePack; using System; namespace ConsoleApp1 { class CallbackReciever { [MessagePackObject] public class SampleCallback : IMessagePackSerializationCallbackReceiver { [Key(0)] public int Key { get; set; } public void OnBeforeSerialize() { Console.WriteLine("OnBefore"); } public void OnAfterDeserialize() { Console.WriteLine("OnAfter"); } } public static void Main() { SampleCallback b1 = new SampleCallback { Key = 1 }; Console.WriteLine("Starting serialization"); byte[] data = MessagePackSerializer.Serialize(b1); foreach (byte b in data) { Console.WriteLine(b); } SampleCallback temp = MessagePackSerializer.Deserialize(data); Console.WriteLine(MessagePackSerializer.ToJson(temp)); } } } 

后….

上述就是C#学习教程:ReflectionTypeLoadException:Type正在尝试实现无法访问的接口分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 using MessagePack; using System; namespace ConsoleApp1 { [MessagePackObject] public class SampleCallback : IMessagePackSerializationCallbackReceiver { [Key(0)] public int Key { get; set; } public void OnBeforeSerialize() { Console.WriteLine("OnBefore"); } public void OnAfterDeserialize() { Console.WriteLine("OnAfter"); } } class CallbackReciever { public static void Main() { SampleCallback b1 = new SampleCallback { Key = 1 }; Console.WriteLine("Starting serialization"); byte[] data = MessagePackSerializer.Serialize(b1); foreach (byte b in data) { Console.WriteLine(b); } SampleCallback temp = MessagePackSerializer.Deserialize(data); Console.WriteLine(MessagePackSerializer.ToJson(temp)); Console.ReadKey(); } } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/991172.html

(0)
上一篇 2021年12月23日
下一篇 2021年12月23日

精彩推荐