仅在已知类的接口时加载序列化对象

时间:2011-12-05 20:49:45

标签: c# serialization plugins assemblies .net-assembly

我正在尝试在C#中添加一个在我的图像处理应用程序中使用插件的选项。

我使用Assembly.LoadFrom方法加载类库,然后查找接口并使用Activator.CreateInstance创建插件实例,这是一个继承自IPlugin接口的类,在两个程序集中都引用了。 (like in the following example)加载程序集在实现IPlugin接口时工作正常。

我在图像处理的另一个类库中也有一个抽象类,我称之为 ImageProcessingAction 。使用图像处理库我可以创建一个要对图像执行的操作列表并将它们保存在序列化文件中,这样可以正常工作,但我还想添加一个选项来创建实现这个抽象类的插件( ImageProcessingAction )以不同的方式创建一个新的动作(也可以正常工作)。

真正的问题是我序列化这个动作列表。如果我使用插件的ImageProcessingAction实现之一序列化列表,它可以工作,但是当我反序列化它时,该方法抛出一个异常,说“无法找到程序集Plugin1”,一个实现IPlugin的人,我刚刚创建了一个实例并序列化了一个它的领域。

我想我可以用picture更好地解释自己: enter image description here

我只是注意到即使在插件中反序列化也不起作用!相同的例外,“无法找到程序集Plugin1”。也许在我进行反序列化更改之前卸载程序集?但我可以出于某种原因序列化......

帮助将非常感激,我尝试了一切,我仍然无能为力。

1 个答案:

答案 0 :(得分:2)

使用专用BinaryFormatter可能可以解决使用Binder的“无法找到程序集”。

http://spazzarama.wordpress.com/2009/06/25/binary-deserialize-unable-to-find-assembly/