反序列化对象(DLL类)

时间:2011-10-31 10:21:38

标签: c# serialization plugins dll

我的dll文件有问题。我正在编写一个可以通过一些插件扩展的程序。我使用这些插件的接口,我可以在我的程序中阅读和使用它们。每个插件都包含一个可序列化的类,其中包含一些简单的字段。 我可以使用二进制格式化程序序列化这些类并将它们保存到磁盘。但是当我尝试反序列化我保存的文件时,我得到一个例外:“无法找到程序集”。

我在哪里注册我的dll-plugins以便我的程序可以找到程序集?

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

确保插件dll及其所有依赖项位于同一目录(或GAC)中。

答案 1 :(得分:0)

首先,我强烈建议使用MEF作为插件,它是.NET 4.0的一部分。

另一方面,DLL从bin文件夹加载。如果你把它们放在其他任何地方都无法找到。现在,如果你仍然坚持在bin中有一个“plugin”子文件夹,那么你可以使用Assembly.LoadFile在启动时手动加载程序集。

答案 2 :(得分:0)

看这里 http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/e5f0c371-b900-41d8-9a5b-1052739f2521

在我的情况下,执行程序集和插件程序集在同一个文件夹中,但我抛出“无法找到程序集...”。

我写了下面的课程

internal class FromLoadedAssemblyBinder : SerializationBinder
    {
        public override Type BindToType(string assemblyName, string typeName)
        {            
            Assembly assembly = Assembly.Load(assemblyName);
            return assembly.GetType(typeName);
        }
    }

并使用

_binaryFormatter = new BinaryFormatter();
_binaryFormatter.Binder = new FromLoadedAssemblyBinder();

代码很简单,但在我的项目中工作正常。