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)); } } } 

后….

 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(); } } }