C# 反序列化对象(dll类)

C# 反序列化对象(dll类),c#,serialization,plugins,dll,C#,Serialization,Plugins,Dll,我的dll文件有问题。我正在写一个可以用插件扩展的程序。我为这些插件使用一个接口,我可以在我的程序中读取和使用它们。每个插件都包含一个可序列化的类,其中包含一些简单的字段。 我可以用二进制格式化程序序列化这些类并将它们保存到磁盘。但是,当我尝试反序列化保存的文件时,我得到一个异常:“程序集……找不到” 我必须在哪里注册我的dll插件,这样我的程序才能找到程序集 谢谢你的帮助 确保插件dll及其所有依赖项位于同一目录(或GAC)中。首先,我强烈建议使用for plugin,它是.NET 4.0的一

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

我必须在哪里注册我的dll插件,这样我的程序才能找到程序集


谢谢你的帮助

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

首先,我强烈建议使用for plugin,它是.NET 4.0的一部分

另一方面,DLL是从bin文件夹加载的。如果你把它们放在别的地方就找不到了。现在,如果您仍然坚持在bin中有一个“plugin”子文件夹,那么您可以在启动时使用
Assembly.LoadFile

查看此处,手动加载程序集

在我的例子中,执行程序集和插件程序集在同一个文件夹中,但抛出异常“程序集…找不到”

我下课写的

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

代码很简单,但在我的项目中效果很好。

您好。当我的dll文件保存到bin文件夹时,可以找到程序集。但是我们必须为插件使用一个特殊的文件夹。我也尝试了“Assembly.LoadFrom()”,但没有效果。我得到了一个Assembly对象,它告诉我许多不同的事情,比如其他接口,但是binaryformatter仍然不知道程序集:(
Assembly.LoadFrom
可以工作,但问题是DLL可能有依赖项,您可能还必须将依赖项放在插件文件夹中。