如何从 2 个不同的程序集加载相同的插件,并在两者之间序列化和反序列化类型?C# .net.

本文关键字:两者之间 序列化 反序列化 net 类型 插件 程序集 加载 | 更新日期: 2023-09-27 17:57:07

所以我有两个.net程序集,一个是wpf,另一个是Windows服务。他们使用 wcf 和 protobuf.net 进行序列化类型。

一切都很顺利,但是我刚刚制作了一个加载插件的原始插件系统,我的项目中的两个程序集都加载相同的插件,目的是通过网络发送其中的类。

所以。。。1. WPF 应用程序加载,使用 Assembly.LoadFrom 加载插件 (.net dll)2. WCF 应用程序使用 Assembly.LoadFrom 加载插件(相同的 .net dll)3. 两个程序集共享源代码中显式引用的 dll(对象库)。

对象库中的所有类型都可以在一端序列化,通过线路进行反序列化没有问题。

插件中的类型可以在两端序列化,但另一端在尝试反序列化时会引发类型未解析异常,即使它们是同一类型。

如何从 2 个不同的程序集加载相同的插件,并在两者之间序列化和反序列化类型?C# .net.

发现了我的问题,感谢霰弹枪愿意提供帮助,本来会有很多代码要显示。

基本上,protobuf 无法加载该类型,因为它在应用程序域的加载上下文中不存在。阅读MSDN上的一些内容,必须处理AppDomain.CurrentDomain.AssemblyResolve事件并返回插件类型的正确程序集。

如果你想加载插件程序集,那么MEF是一个非常好的解决方案。